[100 días competentes en python] Día 17: Excepciones y depuración del programa Python _ tipos y soluciones de excepciones comunes, declaraciones de manejo de excepciones

https://blog.csdn.net/qq_35831906/category_12375510.html?spm=1001.2014.3001.5482

Tabla de contenido

Guía de columna

Una solución y un tipo de excepción comunes de Python

Dos declaraciones comunes de manejo de excepciones

1 intento... excepto declaración 

2 intente... excepto... declaración else

3 intentar... excepto... finalmente declaración

4 Use la declaración de aumento para lanzar una excepción

5 tipos de excepción personalizados

Procesamiento de cadena de 6 excepciones


Guía de columna

        Este artículo está incluido en la columna "Competente en Python en 100 días" .  Esta columna está dirigida a usuarios principiantes y avanzados. El sistema capta rápidamente los conceptos básicos y las habilidades prácticas del lenguaje de programación Python, y domina la sintaxis básica, los tipos de datos , funciones, módulos y programación orientada a objetos de Python. ¡Espere el conocimiento clave y luego profundice en el combate real del proyecto y use python para resolver problemas prácticos!

  ¡Explore el encanto de Python y domine el mundo de la programación! ¡Vamos!

Dirección de suscripción de columna: https://blog.csdn.net/qq_35831906/category_12375510.html


            En Python, una excepción es un error o una condición inesperada que ocurre mientras se ejecuta el programa y evita que el programa continúe normalmente. Python proporciona un conjunto de clases de excepción integradas para representar diferentes tipos de errores. Cuando ocurren excepciones en el programa, estas excepciones pueden ser capturadas y procesadas a través del mecanismo de manejo de excepciones, para manejar correctamente la situación de error.

Una solución y un tipo de excepción comunes de Python

En Python, hay muchos tipos de excepciones integrados que se usan para representar diferentes errores o condiciones excepcionales.

Exception es la clase base de todas las excepciones integradas, y todas las clases de excepción en Python heredan de la clase Exception. Cuando ocurre una excepción en el programa, se lanzará el objeto de excepción correspondiente.Si estas excepciones no se manejan, el programa terminará la ejecución.

Tipos de excepciones comunes y soluciones en python: 

1.SyntaxError: Errores de sintaxis, generalmente causados ​​por errores de escritura en el código, como errores tipográficos, falta de dos puntos, etc.

        Solución: revise el código cuidadosamente para asegurarse de que la sintaxis sea correcta.

2.IndentationError: Errores de sangrado, generalmente causados ​​por un código mal sangrado.

        Solución: Verifique si la sangría del código es correcta, se recomienda usar 4 espacios como sangría.

3.NameError: Mal nombre, generalmente causado por el uso de una variable o nombre de función indefinidos.

        Solución alternativa: asegúrese de que los nombres de variables y funciones estén definidos correctamente o antes de su uso.

4.TypeError: error de tipo, generalmente causado por el uso de un tipo de datos incorrecto.

        Solución: Confirme si los tipos de datos coinciden. De lo contrario, intente realizar la conversión de tipos o utilice el tipo de datos correcto.

5.ValueError: error de valor, generalmente causado por el uso de un valor ilegal.

        Solución: Confirme si el rango de valores de los datos es correcto y asegúrese de que se utilicen los valores legales.

6.ZeroDivisionError: Error de división por cero, generalmente causado por una división por cero en una operación de división.

        Solución: asegúrese de que el divisor no sea cero, y puede realizar el manejo de excepciones cuando el divisor sea cero para evitar bloqueos del programa.

7.IndexError: Error de índice, generalmente causado por el uso de un índice que excede el rango de la secuencia.

        Solución: confirme si el valor del índice está dentro del rango de la secuencia y asegúrese de que no exceda la longitud de la secuencia.

8.KeyError: Error de clave, generalmente causado por el uso de una clave que no existe.

        Solución alternativa: asegúrese de que la clave existe en el diccionario, puede usar inla palabra clave para verificar si existe una clave.

9.FileNotFoundError: El archivo no existe, generalmente causado al intentar abrir un archivo que no existe.

        Solución: compruebe si la ruta del archivo es correcta y asegúrese de que el archivo existe.

10.ImportError: Error de importación, generalmente causado por un problema al importar un módulo o paquete.

        Solución: confirme si la ruta del módulo o paquete es correcta y asegúrese de que el módulo existe.

11. IOError (error de entrada y salida): esta excepción se lanza cuando ocurre un problema relacionado con la entrada y salida de archivos.

        Solución: asegúrese de que los permisos de acceso a los archivos sean correctos y compruebe si hay otros problemas relacionados con la entrada y salida de archivos.

12.AttributeError (Error de atributo): esta excepción se lanza cuando se usa un atributo o método que no existe.

        Solución: asegúrese de que la propiedad o el método existan en el objeto, o que el objeto esté correctamente inicializado antes de acceder a la propiedad o llamar al método.

RuntimeError: error de tiempo de ejecución, que generalmente se lanza como una clase base porque no se puede clasificar en otro tipo de excepción.

    

        La forma general de manejar las excepciones es usar try...exceptsentencias. Ejecute el código que puede generar una excepción en tryel bloque y, si ocurre una excepción, saltará al exceptbloque para manejar la excepción. Al detectar y manejar las excepciones, se pueden evitar los bloqueos del programa y se puede aumentar la solidez y la tolerancia a fallas del programa.

Dos declaraciones comunes de manejo de excepciones

Exception es la clase base de todas las excepciones integradas, y todas las clases de excepción en Python heredan de la clase Exception. Cuando ocurre una excepción en el programa, se lanzará el objeto de excepción correspondiente.Si estas excepciones no se manejan, el programa terminará la ejecución. Para resolver la excepción, podemos tomar el siguiente enfoque:

1 intento... excepto declaración 

        Use una instrucción try...except en un bloque de código que podría generar una excepción para capturar y manejar la excepción. Coloque el código que podría generar una excepción en un bloque de prueba y, si se produce una excepción, maneje la excepción en un bloque de excepción.

Ejemplo 1: capturar tipos de excepción específicos

try:
    num1 = int(input("请输入一个整数: "))
    num2 = int(input("请输入另一个整数: "))
    result = num1 / num2
    print("结果:", result)
except ValueError:
    print("请输入有效的整数值!")
except ZeroDivisionError:
    print("除数不能为零!")

En el ejemplo anterior, estamos tratando de convertir la cadena ingresada por el usuario en un número entero y hacer la división. Si el usuario ingresa algo que no es un número entero válido, ValueErrorse genera una excepción y se imprime un mensaje de error apropiado. Si el divisor es cero, ZeroDivisionErrorse genera una excepción y se imprime un mensaje de error apropiado.

Ejemplo 2: capturar todas las excepciones

try:
    num = int(input("请输入一个整数: "))
    result = 10 / num
    print("结果:", result)
except Exception as e:
    print("发生了异常:", e)

 En este ejemplo, tratamos de convertir la cadena ingresada por el usuario en un número entero y usarla como divisor para la división. Independientemente del tipo de excepción que ocurra, except Exceptionla instrucción detectará y controlará la excepción y asignará el objeto de excepción a la variable e. Luego, imprimimos el mensaje de excepción.

Ejemplo 3: capturar múltiples tipos de excepción

try:
    file = open("nonexistent.txt", "r")
    content = file.read()
    file.close()
    print("文件内容:", content)
except FileNotFoundError:
    print("文件不存在!")
except PermissionError:
    print("没有文件访问权限!")
except Exception as e:
    print("发生了异常:", e)

En el ejemplo anterior, intentamos abrir un archivo que no existe y leer su contenido. Se lanza una excepción si el archivo no existe FileNotFoundError, se lanza una excepción si no hay permisos suficientes para acceder al archivo PermissionError. Usamos varias exceptdeclaraciones para capturar diferentes tipos de excepciones e imprimir los mensajes de error correspondientes. Si se produce cualquier otro tipo de excepción, except Exceptionla declaración la detectará y se imprimirá el mensaje de excepción.

2 intente... excepto... declaración else

        Además de capturar excepciones, también puede agregar un bloque else en la declaración try...except para manejar la situación cuando no hay excepción.

        Nos permite intentar ejecutar un bloque de código que podría generar una excepción, y si ocurre una excepción, podemos exceptmanejar el caso excepcional en el bloque y elseel caso de ejecución normal en el bloque.

La estructura gramatical es la siguiente:

try:
    # 可能引发异常的代码块
except ExceptionType:
    # 处理指定类型的异常
else:
    # 没有异常时执行的代码块

Ejemplo 1:

def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        print("Error: Division by zero!")
    else:
        print(f"The result of {x} divided by {y} is {result}")

divide(10, 2)   # Output: The result of 10 divided by 2 is 5.0
divide(10, 0)   # Output: Error: Division by zero!

Ejemplo 2; 

try:
    num1 = int(input("请输入一个整数: "))
    num2 = int(input("请输入另一个整数: "))
    result = num1 / num2
except ValueError:
    print("请输入有效的整数值!")
except ZeroDivisionError:
    print("除数不能为零!")
else:
    print("结果:", result)

En este ejemplo, dividimos dos enteros ingresados ​​por el usuario. Si la entrada del usuario no es un entero válido, ValueErrorse lanzará una excepción; si el divisor es cero, ZeroDivisionErrorse lanzará una excepción. Si no ocurre ninguna excepción, elseel resultado se imprimirá en el bloque.

Independientemente de si es exceptun bloque o elseun bloque, como máximo se ejecutará un bloque. exceptSi ocurre una excepción, se ejecutará el bloque correspondiente ; si no ocurre ninguna excepción, elsese ejecutará el bloque.

Otro: el bloque de excepción en la declaración try-except-else es opcional, puede optar por usar solo bloques de prueba y más, o agregar varios bloques de excepción para detectar diferentes tipos de excepciones

3 intentar... excepto... finalmente declaración

        El bloque finalmente se puede agregar en la declaración try...except, y el código en el bloque finalmente se ejecutará independientemente de si se produce una excepción. Se utiliza para capturar y manejar las excepciones que pueden ocurrir y para ejecutar algún bloque de código independientemente de si ocurre una excepción o no.

   tryUn bloque contiene código que puede generar una excepción, exceptun bloque se usa para manejar una excepción y finallyel código dentro del bloque siempre se ejecuta, ya sea que ocurra una excepción o no.

Las siguientes son try...except...finallyexplicaciones detalladas y ejemplos de las declaraciones:

  1. tryBloque: contiene código que puede generar una excepción.

  2. exceptBloques: se utilizan para capturar y manejar excepciones. Cuando tryocurre una excepción dentro de un bloque, el programa salta tryel código restante del bloque y ejecuta exceptel código dentro del bloque. Puede usarlo exceptseguido de un tipo de excepción específico para manejar un tipo específico de excepción, o puede usarlo exceptsin ningún tipo de excepción para manejar todas las excepciones.

  3. finallyBloque: el código contenido siempre se ejecuta independientemente de si se produce una excepción. Independientemente de si se produce una excepción, finallyel código del bloque se ejecutará para garantizar que se realice el trabajo de limpieza necesario cuando se produzca una excepción.

Aquí hay un ejemplo simple que demuestra try...except...finallyel uso de la declaración:

def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        print("除数不能为零!")
        result = None
    finally:
        print("执行finally块!")
    return result

# 调用函数
print(divide(10, 2))  # 输出: 5.0
print(divide(10, 0))  # 输出: 除数不能为零! 执行finally块! None

        En el ejemplo anterior, definimos una dividefunción que toma dos argumentos xe yintenta xdividir por y. Si es ycero, ZeroDivisionErrorse activará una excepción. En tryel bloque, intentamos realizar la operación de división y, si ocurre una excepción, exceptse ejecuta el código del bloque para imprimir el mensaje de error. finallyEl código del bloque se ejecutará tanto si se produce una excepción como si no .

Nota: finallyEl código en el bloque es opcional y se puede omitir y no usar. En try...exceptuna estructura, trylos bloques son obligatorios, mientras que exceptlos bloques y finallylos bloques son opcionales.

4 Use la declaración de aumento para lanzar una excepción

        En Python, raiselas excepciones se pueden lanzar manualmente usando la declaración. raiseLas declaraciones le permiten generar excepciones activamente en puntos específicos de su código, lo que permite el manejo de errores si es necesario.

  raiseLa sintaxis general de la sentencia es la siguiente:

raise [ExceptionType[(args)]]

         Entre ellos, ExceptionTypese encuentra el tipo de excepción, que puede ser un tipo de excepción integrado (como ValueError, TypeErroretc.) o un tipo de excepción personalizado. argses un parámetro opcional para proporcionar información adicional sobre la excepción.

        Aquí hay un raiseejemplo del uso de una declaración para lanzar una excepción:

def divide(x, y):
    if y == 0:
        raise ValueError("除数不能为零!")
    return x / y

try:
    result = divide(10, 0)
    print(result)
except ValueError as e:
    print("发生异常:", e)

En el ejemplo anterior, definimos una dividefunción que toma dos parámetros xy y. Si es ycero, usamos raisela declaración para lanzar una ValueErrorexcepción con un mensaje de error "¡el divisor no puede ser cero!". Llame a tryla función en el bloque y capture y maneje la excepción lanzada en el bloque.divideexcept

Resultado de salida:

发生异常: 除数不能为零!

Mediante el uso raisede declaraciones, puede generar excepciones de manera proactiva cuando sea necesario y realizar el manejo de excepciones cuando corresponda. Esto puede mejorar la legibilidad y la solidez del código, haciendo que el manejo de errores sea más flexible y preciso.

5 tipos de excepción personalizados

        Si necesita manejar un tipo específico de excepción, puede personalizar la clase de excepción y lanzar esa excepción cuando sea necesario. 

class MyError(Exception):
    def __init__(self, message):
        self.message = message

try:
    raise MyError("自定义异常")
except MyError as e:
    print("捕获自定义异常:", e.message)

Procesamiento de cadena de 6 excepciones

        Si la excepción no se puede manejar en la ubicación actual, la excepción se puede pasar a la función de llamada de la capa superior para su procesamiento, formando una cadena de excepción.

def func():
    try:
        result = 10 / 0
    except ZeroDivisionError as e:
        raise MyError("发生异常:") from e

try:
    func()
except MyError as e:
    print("捕获异常链:", e)

       

Estos métodos anteriores pueden ayudarnos a manejar y resolver excepciones y garantizar la estabilidad y confiabilidad del programa. Sin embargo, se debe tener en cuenta que el manejo de excepciones se debe usar de manera razonable y evitar el uso excesivo de las sentencias try...except El manejo de excepciones se debe realizar de acuerdo con la situación específica para mantener el código claro y legible.


Excepciones y depuración del programa PythonSiguiente:  [100 días de competencia en python] Día 18: Excepciones y depuración del programa Python_Métodos y habilidades comunes de depuración del programa, cómo separar el código de depuración del código oficial_Blog de LeapMay-Blog de CSDN

Supongo que te gusta

Origin blog.csdn.net/qq_35831906/article/details/131932128
Recomendado
Clasificación