Excepciones y archivos

1. Introducción a la excepción

  • Breve introducción de la excepción:
  • Pueden ocurrir algunos errores durante la ejecución del programa. Por ejemplo: usar un índice inexistente, agregar dos tipos de datos diferentes. . . Estos errores se denominan excepciones.
  • Manejo de excepciones:
  • Se produce una excepción cuando el programa se está ejecutando, ¡y el propósito no es hacer que nuestro programa finalice directamente! Python espera que cuando ocurra una excepción, podamos escribir código para manejar la excepción.
    Demo 1:
import requests
print('python')
# try代码的意思时尝试执行以下代码,如果代码不会出错,就直接执行try内部的代码;如果出错,则执行except内部的代码。
try:
    response = requests.get('www.baidu.com')
    print(response)
except:
    print('代码出错才会执行本语句!')
else:
    print('代码没有出错')
print('pycharm')

Resultado de la salida de impresión:

python
代码出错才会执行本语句!
pycharm

Demo 2:

import requests
print('python')
# try代码的意思时尝试执行以下代码,如果代码不会出错,就直接执行try内部的代码;如果出错,则执行except内部的代码。
try:

    print(111)
except:
    print('代码出错才会执行本语句!')
else:
    print('代码没有出错')
print('pycharm')

Resultado de la salida de impresión:

python
111
代码没有出错
pycharm
  • La sintaxis para manejar excepciones:
try:
    代码块(可能出错的代码块):出错了就不执行,没有错就执行
except:
    代码块(出错了就执行的语句,没有出错就不执行)
else:
    代码(没有出错就执行,出错了就不执行)

En segundo lugar, la propagación de anomalías

  • Transmisión de anomalías:
  • 1. Cuando ocurre una excepción en una función, si la excepción se maneja en la función, la excepción no se propagará. Si la excepción no se maneja en la función, la excepción continuará propagándose a través de llamadas a la función. Si la función que llama al lugar maneja la excepción, no = propagará la excepción, si no se maneja, continuará propagándose al lugar de la llamada. Sabiendo que se propaga al ámbito global (módulo principal), si aún no hay procesamiento, el programa termina y muestra un mensaje de excepción.
  • 2. Cuando ocurre una excepción durante la operación del programa, toda la información de la excepción se guardará en un objeto de excepción. Cuando se propaga la excepción, el objeto de excepción se lanza al llamador.
    Demo 1:
def fn():
    print('我是fn')
    try:
        a = 1 / 0
    except:
        print('代码出错了')

fn()

Resultado de la salida de impresión:
me
equivoco con el código fn

Demo 2:

def fn():
    print('我是FN')
    a = 1 / 0

try:
    fn()
except:
    print('代码出错运行此行')

Resultado de la salida de impresión:
soy un
error de código FN ejecutar esta línea

Demo 3:

def fn():
    print('我是fn')
    a = 1 / 0


def fn1():
    print('我是fn1')
    fn()


def fn2():
    print('我是fn2')
    fn1()


def fn3():
    print('我是fn3')
    fn2()


fn3()

Resultado de la salida de impresión:

Traceback (most recent call last):
  File "D:\PycharmProjects\wangjiaxin\Python-Cheney老师基础讲解\第十五讲\2--异常的传播.py", line 47, in <module>
    fn3()
  File "D:\PycharmProjects\wangjiaxin\Python-Cheney老师基础讲解\第十五讲\2--异常的传播.py", line 44, in fn3
    fn2()
  File "D:\PycharmProjects\wangjiaxin\Python-Cheney老师基础讲解\第十五讲\2--异常的传播.py", line 39, in fn2
    fn1()
  File "D:\PycharmProjects\wangjiaxin\Python-Cheney老师基础讲解\第十五讲\2--异常的传播.py", line 34, in fn1
    fn()
  File "D:\PycharmProjects\wangjiaxin\Python-Cheney老师基础讲解\第十五讲\2--异常的传播.py", line 29, in fn
    a = 1 / 0
ZeroDivisionError: division by zero
我是fn3
我是fn2
我是fn1
我是fn

Conclusión: Cuando hay un error en una función similar a la relación de herencia, las funciones posteriores reportarán un error.

Tres, objetos anormales

  • ZeroDivisionError detecta la excepción de división por error cero.
  • NameError detecta una excepción de variable inicializada no declarada
  • La excepción captura todas las excepciones.
    Demo 1:
print('异常出现之前')
try:
   # print(response)
   a = 1 / 0
except ZeroDivisionError:
    print('代码出错了')
print('异常出现之后')

Resultado de la salida de impresión:

异常出现之前
代码出错了
异常出现之后

Resumen:
ZeroDivisionError significa que se puede detectar la excepción de división por error cero.
ZeroDivisionError solo detectará la excepción de ZeroDivisionError y no detectará otras excepciones.

Demo 2:

print('异常出现之前')
try:
   print(response)
   # a = 1 / 0
except NameError:
    print('代码出错了')
print('异常出现之后')

Resultado de la salida de impresión:

异常出现之前
代码出错了
异常出现之后

Resumen:
NameError representa una excepción que puede capturar variables inicializadas no declaradas.
NameError solo detectará la excepción de NameError y no detectará otras excepciones.

Demo 3:

# print('异常出现之前')
# try:
#    print(response)
#    a = 1 / 0
# except ZeroDivisionError:
#     print('ZeroDivisionError异常')
# except NameError:
#     print('NameErrory异常')
# print('异常出现之后')

Resultado de la salida de impresión:

异常出现之前
NameErrory异常
异常出现之后

Resumen:
qué tipo de excepción aparece primero y ejecuta qué excepción detectar. Ya no se detectarán excepciones posteriores.

Demostración 4:

print('异常出现之前')
try:
   print(response)
   a = 1 / 0
   print(1 + 'a')
except Exception as e:
    print('类型错误', e, type(e))
print('异常出现之后')

Resultado de la salida de impresión:

异常出现之前
类型错误 name 'response' is not defined <class 'NameError'>
异常出现之后
  • gramática:
try::
    代码块(可能出错的代码):出错了就不执行,没有错就执行。
except:
    代码块(出错了就执行的语句,没出错就不执行)
except Exception as e:
    代码块(出现异常我们的处理方式)
finally:
    代码块(是否有异常,都会执行)

Nota : al menos uno de excepto y finalmente

Cuarto, abre el archivo

  • Apertura de archivo:
  • Archivo (archivo) a través del programa Python para agregar, eliminar, modificar y verificar varios archivos en la computadora. El archivo también se llama E / S (entrada / salida)
  • Operación de archivo:
  • 1. Abra el archivo
  • 2. Realizar varias operaciones en el archivo (leer, escribir, luego guardar)
  • 3. Cierre el archivo
  • El archivo tendrá un valor de retorno. Devuelve un objeto, que representa el archivo actual.
    Demostración 1:
    cree una demostración de archivo dentro del directorio de destino
file_name = 'demo'
response = open(file_name)
print(response)

Resultado de la salida de impresión:
<_io.TextIOWrapper name = 'demo' mode = 'r' encoding = 'UTF-8'>

Demostración 2: ruta absoluta de Windows10

file_name = 'D:\PycharmProjects\wangjiaxin\Python-Cheney老师基础讲解\第十四将\demo'
response = open(file_name)
print(response)

D: \ PycharmProjects \ wangjiaxin \ Python-Cheney explicación básica del maestro \ decimocuarto general \ demo: esta es la ruta absoluta.

Demostración 3: ruta de emparejamiento de macos

file_name = '/Volumes/苹果微软公共盘/PycharmProjects/wangjiaxin/Python-Cheney老师基础讲解/第十四将/demo'
response = open(file_name)
print(response)

/ Volumes / Apple Microsoft Public Disk / PycharmProjects / wangjiaxin / Explicación básica del profesor de Python-Cheney / Decimocuarto General / demo: esta es la ruta absoluta.

Demo 4: ruta relativa

file_name = '..\第十四讲\demo'
response = open
print(response)

Resultado de la salida de impresión:

Cinco, cierra el archivo

Demo 1: modo normal

  • método close () para cerrar el archivo
file_name = 'demo'
resp = open(file_name)

content = resp.read()
print(content)
# 关闭文件
resp.close()
print(resp.read())

Resultado de la salida de impresión:

/Volumes/苹果微软公共盘/PycharmProjects/venv/bin/python /Volumes/苹果微软公共盘/PycharmProjects/wangjiaxin/Python-Cheney老师基础讲解/第十五讲/5--关闭文件.py
12580
Traceback (most recent call last):
  File "/Volumes/苹果微软公共盘/PycharmProjects/wangjiaxin/Python-Cheney老师基础讲解/第十五讲/5--关闭文件.py", line 9, in <module>
    print(resp.read())
ValueError: I/O operation on closed file.

Demostración 2: modo de actualización

  • con. . La instrucción as no necesita escribir close () para cerrar. Con apagado automático.
file_name = 'demo'
with open(file_name) as resp:
    content = resp.read()
    print(content)

respose = resp.read()
print(respose)

Resultado de la salida de impresión:

/Volumes/苹果微软公共盘/PycharmProjects/venv/bin/python /Volumes/苹果微软公共盘/PycharmProjects/wangjiaxin/Python-Cheney老师基础讲解/第十五讲/5--关闭文件.py
Traceback (most recent call last):
  File "/Volumes/苹果微软公共盘/PycharmProjects/wangjiaxin/Python-Cheney老师基础讲解/第十五讲/5--关闭文件.py", line 19, in <module>
    respose = resp.read()
ValueError: I/O operation on closed file.
12580

Demostración 3: modo avanzado

file_name = 'demo1'
try:
    with open(file_name) as resp:
        content = resp.read()
        print(content)
except Exception as e:
    print('没有这个文件', type(e))

Resultado de la salida de impresión:

/Volumes/苹果微软公共盘/PycharmProjects/venv/bin/python /Volumes/苹果微软公共盘/PycharmProjects/wangjiaxin/Python-Cheney老师基础讲解/第十五讲/5--关闭文件.py
白日依山尽
黄河入海流
欲穷千里目
更上一层楼

Inserte la descripción de la imagen aquí

Seis, lee el archivo

  • Leer el archivo:
  • Leer el contenido del archivo a través de read ()
  • Llame a open () para abrir un archivo, el archivo se puede dividir en 2 tipos
    • Un archivo de texto sin formato (un archivo escrito con codificación utf-8)
    • Un archivo binario (imagen mp3 video ...)
    • Cuando open () abre un archivo, se abre como un archivo de texto de forma predeterminada. La codificación predeterminada de open () es Ninguna. Por tanto, especifique la codificación al procesar archivos de texto
  • Lectura de archivos más grandes:
  • Al leer el contenido de un archivo a través de read (), se leerá todo el contenido del archivo. Si el archivo a leer es relativamente grande. El archivo se cargará en el contenido de una vez. Conduce fácilmente a pérdidas de memoria. Entonces, para archivos más grandes. No llames a read () directamente.
  • read () puede recibir un tamaño como parámetro. Este parámetro se utiliza para especificar el número de caracteres que se leerán. El valor predeterminado es -1.-1, lo que significa leer todo el contenido.
  • Cada lectura comenzará desde la última posición de lectura. Si el número de caracteres es menor que el tamaño. Todo será leído. Si se lee el último archivo. Devolverá una cadena vacía.
  • readline () Este método se utiliza para leer una línea.
  • readline () Este método se utiliza para leer el contenido línea por línea, encapsulará el contenido leído en una lista de una vez y lo devolverá.
    Demo 1:
    Inserte la descripción de la imagen aquí
file_name = 'demo1'
try:
	with open(file_name) as resp:
		content = resp.read()
		print(content)
except FileExistsError:
	print(f'{file_name}文件不存在')

La impresión:
Sun Mountains
Yellow River desemboca en el mar
para una vista más grandiosa
al siguiente nivel

  • Los tipos de archivos que se abren pueden abrir:

    • 1. Texto sin formato (archivo de texto escrito con utf-8)
    • 2. Otros archivos binarios (imágenes, videos, música)
  • Otros métodos de lectura de archivos: readline () Este método se utiliza para leer el contenido línea por línea, encapsulará el contenido leído en una lista a la vez y lo devolverá.

Manifestación:

file_name = 'demo1'

try:
    with open(file_name) as resp:
        for i in range(6):
            content = resp.readline()
            print(content,end='')
except FileExistsError:
    print(f'{file_name}文件不存在')

Siete, escritura de archivos

  • write () para escribir contenido en el archivo
    • Este método puede escribir contenido en el archivo varias veces.
    • Una vez completada la escritura, el método devolverá el número de caracteres escritos
  • Cuando usa la función open () para abrir un archivo, debe especificar la operación (leer, escribir, agregar) para abrir el archivo. Si no especifica el tipo de operación, el valor predeterminado es leer el archivo y no puede escribir en el archivo cuando lee el archivo.
    • r significa solo lectura
    • w significa escribible. Al escribir un archivo con w, se creará un archivo si el archivo no existe. Si el archivo existe, se sobrescribirá el contenido del archivo original.
    • un medio adjunto.
      Demo 1:
file_name = 'demo1'

# 'w'是覆盖式写入的意思
try:
    with open(file_name, 'w', encoding='utf-8') as resp:
        content = resp.write('123\n')
        content = resp.write('456\n')
        content = resp.write('789\n')
except:
    print('出错了')

Resultado de la salida de impresión:

/Volumes/苹果微软公共盘/PycharmProjects/venv/bin/python /Volumes/苹果微软公共盘/PycharmProjects/wangjiaxin/Python-Cheney老师基础讲解/第十五讲/9--文件的写入.py

Process finished with exit code 0

Demo 2:

file_name = 'demo1'

# 'a'是追加的意思
try:
    with open(file_name, 'a', encoding='utf-8') as resp:
        content = resp.write('123\n')
        content = resp.write('456\n')
        content = resp.write('789\n')
except:
    print('出错了')

Resultado de la salida de impresión:

123
456
789
123
456
789

Inserte la descripción de la imagen aquí

Ocho archivos binarios

  • Al leer un archivo de texto, el tamaño está en caracteres. Al leer un archivo binario, el tamaño está en bytes
  • Usamos wb para escribir archivos binarios
    Demo:
file_name = r'/Users/wangjiaxin/Desktop/111.ncm'

# rb时读写二进制文件的意思
try:
    with open(file_name, 'rb') as resp:
        new_file = '124.mp3'
        # print(resp.read())
        # wb写入二进制文件

        with open(new_file, 'wb') as f:
            while True:
                content = resp.read(1024*800)
                if not content:
                    break
                f.write(content)



except:
    print('出错了')

Debido al problema de conversión de formato, este procedimiento no tiene resultados.

Supongo que te gusta

Origin blog.csdn.net/Rhymeplot__JDQS/article/details/109299195
Recomendado
Clasificación