Conocimientos básicos de Python (tres): error de Python, advertencia, resumen de manejo de excepciones

Inserte la descripción de la imagen aquí

1 error de sintaxis

Los principiantes suelen encontrar errores de sintaxis de Python o errores de análisis, como se muestra en el siguiente ejemplo

>>> while True print('Hello world')
  File "<stdin>", line 1, in ?
    while True print('Hello world')
                  ^
SyntaxError: invalid syntax

En este ejemplo, la función print () se comprueba en busca de errores porque carece de dos puntos: delante de ella.
El analizador señaló la línea incorrecta y marcó una pequeña flecha donde se encontró el error primero.

2 Advertencia estándar

  • Advertencia: la clase base para advertencias
  • DeprecationWarning: advertencia sobre funciones obsoletas
  • FutureWarning: una advertencia de que la semántica de la estructura cambiará en el futuro
  • UserWarning: advertencia generada por el código de usuario
  • PendingDeprecationWarning: una advertencia de que la función quedará obsoleta
  • RuntimeWarning: advertencia de comportamiento sospechoso en tiempo de ejecución (comportamiento en tiempo de ejecución)
  • SyntaxWarning: advertencia de sintaxis sospechosa
  • ImportWarning: se utiliza para activar una advertencia durante la importación de un módulo
  • UnicodeWarning: advertencias relacionadas con Unicode
  • BytesWarning: advertencias relacionadas con bytes o bytecode
  • ResourceWarning: advertencias relacionadas con el uso de recursos

Si necesita ignorar la advertencia, simplemente agregue el siguiente código.

>>> import warnings 
>>> warnings.filterwarnings('ignore')

3 Manejo de excepciones

Incluso si la sintaxis de un programa Python es correcta, pueden producirse errores al ejecutarlo. Los errores detectados durante el tiempo de ejecución se denominan excepciones. El lenguaje informático define los tipos de excepción para posibles errores. Cuando un cierto error desencadena una excepción correspondiente, se iniciará el controlador de excepciones para restaurar el funcionamiento normal del programa. La mayoría de las excepciones no serán manejadas por el programa y se muestran en forma de mensajes de error.

Resumen del manejo de excepciones comunes:Inserte la descripción de la imagen aquí

La instrucción try-except captura (recibe) la notificación de excepción y convierte el flujo de excepción en el flujo normal. La
instrucción try-finalmente ejecuta la instrucción que debe ejecutarse. La
instrucción raise envía la notificación de excepción y, al mismo tiempo, ingresa al flujo de excepción, la
instrucción assert envía la excepción AssertionError

3.1 excepciones estándar de Python

  • BaseException: todas las clases base anormales
  • Excepción: clase básica de anomalía convencional
  • StandardError: la clase base para todas las excepciones estándar integradas
  • ArithmeticError: la clase base para todas las excepciones de cálculo numérico
  • FloatingPointError: excepción de cálculo de punto flotante
  • OverflowError : la operación numérica excede el límite máximo
  • ZeroDivisionError : división por cero
  • AssertionError : la declaración de aserción (aserción) falló
  • AttributeError : intento de acceder al atributo de objeto desconocido
  • EOFError: Sin entrada incorporada, se alcanza la marca EOF
  • EnvironmentError: la clase base de excepciones del sistema operativo
  • IOError: Falló la operación de entrada / salida
  • OSError : una excepción generada por el sistema operativo (por ejemplo, abrir un archivo que no existe)
  • WindowsError: la llamada al sistema falló
  • ImportError : cuando falla la importación de un módulo
  • KeyboardInterrupt: ejecución de la interrupción del usuario
  • LookupError: la clase base para consultas de datos no válidas
  • IndexError : el índice está fuera del rango de la secuencia
  • KeyError : busque una palabra clave que no existe en el diccionario
  • MemoryError : desbordamiento de la memoria (la memoria se puede liberar eliminando el objeto)
  • NameError : intento de acceder a una variable que no existe
  • UnboundLocalError: acceso a variables locales no inicializadas
  • ReferenceError: intentos de referencia débiles de acceder a objetos que se han recolectado como basura
  • RuntimeError: excepción de tiempo de ejecución general
  • NotImplementedError: método aún no implementado
  • SyntaxError : excepción causada por un error de sintaxis
  • IndentationError: excepción causada por un error de sangría
  • TabError: Tab y espacio se mezclan
  • SystemError: excepción del sistema de intérprete general
  • TypeError : operación no válida entre diferentes tipos
  • ValueError : parámetro no válido pasado
  • UnicodeError: excepción relacionada con Unicode
  • UnicodeDecodeError: excepción durante la decodificación Unicode
  • UnicodeEncodeError: excepción causada por un error de codificación Unicode
  • UnicodeTranslateError: excepción causada por un error de conversión Unicode

Hay relaciones jerárquicas dentro del sistema de excepciones. Algunas relaciones en el sistema de excepciones de Python son las siguientes:

3.2 declaración try-except

La captura de excepciones puede usar declaraciones try / except.
Inserte la descripción de la imagen aquí
La declaración try funciona de la siguiente manera:

  • Primero, ejecute la trycláusula ( la declaración entre la palabra clave tryy la palabra clave except)
  • Si no se produce una excepción, la exceptcláusula se ignora y la trycláusula finaliza después de la ejecución.
  • Si tryocurre una excepción durante la ejecución de la cláusula, el tryresto de la cláusula se ignorará. Si el tipo de excepción exceptcoincide con el nombre que le sigue, exceptse ejecutará la cláusula correspondiente . tryEl código después de la última declaración ejecutada .
  • Si una excepción no coincide con ninguna except, la excepción se pasará a la capa superior try.

【ejemplo】

try:
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))
# 打开文件出错
# 原因是:[Errno 2] No such file or directory: 'test.txt'

Una trydeclaración puede contener múltiples exceptcláusulas para manejar diferentes excepciones específicas. Como máximo, solo se ejecutará una rama.

【ejemplo】

try:
    int("abc")
    s = 1 + '1'
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))
except TypeError as error:
    print('类型出错\n原因是:' + str(error))
except ValueError as error:
    print('数值出错\n原因是:' + str(error))
# 数值出错
# 原因是:invalid literal for int() with base 10: 'abc'

[Ejemplos] una exceptcláusula puede manejar múltiples excepciones que se colocarán entre paréntesis como una tupla.

try:
    s = 1 + '1'
    int("abc")
    f = open('test.txt')
    print(f.read())
    f.close()
except (OSError, TypeError, ValueError) as error:
    print('出错了!\n原因是:' + str(error))
# 出错了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'

3.3 declaración try-except-else

La instrucción try-except también tiene una cláusula else opcional. Si se usa esta cláusula, debe colocarse después de todas las cláusulas excepto. La cláusula else se ejecutará cuando no se produzca ninguna excepción en la cláusula try.
Inserte la descripción de la imagen aquí

exceptNo es una buena forma de usarlo sin ningún tipo de excepción No podemos identificar información específica de excepción a través del programa porque detecta todas las excepciones.

【ejemplo】

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print("Error: 没有找到文件或读取文件失败")
else:
    print("内容写入文件成功")
    fh.close()
# 内容写入文件成功

Nota: elseLa existencia de una exceptdeclaración debe basarse en la existencia de exceptla trydeclaración. El uso de una declaración en una elsedeclaración sin una declaración causará un error gramatical.

3.4 probar - excepto - si no - finalmente 语句

La instrucción try-finalmente ejecutará el código final independientemente de si se produce una excepción.
Inserte la descripción de la imagen aquí

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码
finally:
    无论如何都会被执行的代码

Independientemente de si se tryproduce una excepción en la finallycláusula , la cláusula se ejecutará.
Si tryse lanza una excepción en la cláusula sin ninguna exceptintercepción, la excepción se lanzará finallydespués de que se ejecute la cláusula.

【ejemplo】

def divide(x, y):
    try:
        result = x / y
        print("result is", result)
    except ZeroDivisionError:
        print("division by zero!")
    finally:
        print("executing finally clause")
divide(2, 1)
# result is 2.0
# executing finally clause
divide(2, 0)
# division by zero!
# executing finally clause
divide("2", "1")
# executing finally clause
# TypeError: unsupported operand type(s) for /: 'str' and 'str'

3.5 declaración de aumento: lanzar una excepción

Python usa la instrucción raise para lanzar una excepción específica.
El formato de sintaxis de raise es el siguiente:

subir [Excepción [, args [, rastreo]]]

Inserte la descripción de la imagen aquí

Python usa la raisedeclaración para lanzar una excepción específica.
【ejemplo】

try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')    
# An exception flew by!

3.6 afirmar declaración-aserción

La aserción (aserción) de Python se usa para juzgar una expresión y desencadenar una excepción cuando la condición de la expresión es falsa.
Las afirmaciones pueden devolver directamente un error cuando no se cumplen las condiciones y el programa se ejecuta, sin esperar a que el programa se bloquee después de ejecutarse. Por ejemplo, nuestro código solo se puede ejecutar en el sistema Linux. Primero puede determinar si el sistema actual cumple las condiciones. Inserte la descripción de la imagen aquí
El formato de sintaxis es el siguiente:

afirmar expresión

Equivalente a:

si no es expresión:
levanta AssertionError

Los parámetros también pueden ir seguidos de assert:

afirmar expresión [, argumentos]

【ejemplo】

>>> assert 1==1    # 条件为 true 正常执行
>>> assert 1==2    # 条件为 false 触发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

# 以下实例判断当前系统是否为 Linux,如果不满足条件则直接触发异常,不必执行接下来的代码:
>>> import sys
>>> assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"

3.7 Excepción definida por el usuario

Puede tener sus propias excepciones creando una nueva clase de excepción. La clase de excepción hereda de la clase de excepción y se puede heredar directa o indirectamente, por ejemplo:

>>> class MyError(Exception):
        def __init__(self, value):
            self.value = value
        def __str__(self):
            return repr(self.value)  
            
>>> try:
        raise MyError(2*2)
    except MyError as e:
        print('My exception occurred, value:', e.value)   
My exception occurred, value: 4

>>> raise MyError('oops!')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
__main__.MyError: 'oops!'

La mayoría de los nombres de excepción terminan en "Error", al igual que los nombres de excepción estándar.

Preguntas de práctica :
1. Adivina el juego de números .
Descripción del título: la
computadora genera un número aleatorio entre cero y 100, y luego le pide al usuario que adivine. Si el número adivinado por el usuario es mayor que este número, el mensaje es demasiado grande; de ​​lo contrario, el mensaje es demasiado pequeño. La computadora le preguntará "Felicitaciones, adivinó este número ...". Antes de que el usuario adivine cada vez, el programa generará la primera suposición del usuario, si la entrada del usuario no es un número, el programa le dirá al usuario "entrada inválida".
(Intente usar la estructura de manejo de excepciones try catch para lidiar con la situación de entrada)
El módulo aleatorio se usa para obtener números aleatorios.

# your code here
import numpy as np

if __name__=="__main__":
    print("猜测一个0-100之间的整数:")
    num = np.random.randint(100)
    count = 0
    flag = True
    while flag:
        count += 1
        try:
            guess = int(input("第"+str(count)+"次猜,请输入一个整形数字:"))
            if guess < num:
                print("太小了")
            elif guess > num:
                print("太大了")
            else:
                print("恭喜你猜到了这个数是"+str(num))
                flag = False
        except:
            pass
            print("输入无效")
猜测一个0-100之间的整数:
第1次猜,请输入一个整形数字:50
太大了
第2次猜,请输入一个整形数字:25
太大了
第3次猜,请输入一个整形数字:12
太大了
第4次猜,请输入一个整形数字:6
太小了
第5次猜,请输入一个整形数字:9
恭喜你猜到了这个数是9

Referencia

  • https://www.runoob.com/python3/python3-errors-execptions.html
  • https://github.com/datawhalechina/team-learning-program

Datawhale

Datawhale es una organización de código abierto que se centra en la ciencia de datos y la inteligencia artificial. Reúne a estudiantes excelentes de muchas universidades y empresas reconocidas en muchos campos, y reúne a un grupo de miembros del equipo con espíritu de código abierto y exploratorio. Con la visión de "para el alumno, crecer con los alumnos", Datawhale fomenta la verdadera autoexpresión, la apertura y la tolerancia, la confianza mutua y la asistencia mutua, el valor para intentar cometer errores y el valor para asumir la responsabilidad. Al mismo tiempo, Datawhale utiliza el concepto de código abierto para explorar contenido de código abierto, aprendizaje de código abierto y soluciones de código abierto, potenciar la formación del talento, ayudar al crecimiento del talento y establecer una conexión entre personas, personas y conocimiento, personas y empresas, y personas y el futuro.

Supongo que te gusta

Origin blog.csdn.net/OuDiShenmiss/article/details/107575750
Recomendado
Clasificación