Pregunta

Para un bloque como esto:

try:
    #some stuff
except Exception:
    pass

pylint plantea advertencia 'captura "Excepción"' W0703. ¿Por qué?

¿Fue útil?

Solución

Se considera una buena práctica normalmente no coger el objeto de excepción de la raíz, pero en lugar de atrapar los más específicos - por ejemplo IOException

.

Tenga en cuenta si una excepción de memoria insuficiente ocurrió -. El simple uso de "pase" no va a abandonar su programa en un buen estado

Más o menos la única vez que debe coger excepción es en el nivel superior de su programa, donde se puede (intentar) inicia la sesión, mostrará un error, y salir con tanta gracia como sea posible.

Otros consejos

Es una buena práctica para capturar sólo una estrecha gama de tipos. 'Excepción' es demasiado general - que va a terminar la captura no sólo los errores de tus pensamientos para con, pero otros errores también, que puede enmascarar los errores en el código que sería más rápido para diagnosticar si no fueron capturados en absoluto, o posiblemente no ser mejor tratado por un único controlador de muy alta excepción de nivel.

Una vez dicho esto, ya que Python2.6, la captura de excepciones se ha vuelto mucho más razonable, ya que todas las excepciones que usted no querría coger (SystemExit, KeyboardInterrupt) ya no se heredan de Excepción. En su lugar, heredan de una BaseException común en su lugar. Esto se ha hecho deliberadamente con el fin de realizar la captura de excepciones relativamente inofensivo, ya que es un lenguaje tan común.

PEP 3110 para los detalles y planes para el futuro.

, ya que piensa que vas a tomar demasiado. y es justo.

Excepción se elevan cuando ocurre algo ... excepcional. Es generalmente una buena cosa que el programa termina.

Es posible que desee hacer caso omiso de algunas excepciones, pero En mi opinión no hay una buena razón para la captura de una clase base de esa manera.

como respuesta de Greg, 'excepción' es una clase base y excepciones debe derivarse de esta clase, véase también exceptions.Exception .

A continuación, una muy útil lista de errores en pydocs

Tenga en cuenta también el módulo de rastreo muy útil que le permite averiguar dónde se encuentra la excepción ocurrió. Usando sólo 'excepto: ...' te mostrará lo mejor de error que debería utilizarse en su caso. Por ejemplo, trate de este código (alternar el comentario), tal vez usted acepta que:

import traceback
#absent = 'nothing'
try:
    something = absent
except  NameError:
    traceback.print_exc()
else:
    print("you get here only when you uncomment 'absent'") 

La captura de excepciones (sin re-cría) tiene 2 efectos secundarios muy malos: los errores se los comen, por lo que se pierde el seguimiento de la pila, sino también que Ctrl-C (o lo que sea la clave de ruptura es en su sistema operativo) también consigue manejado aquí.

El comportamiento típico de los programas de este tipo es que, o bien no se puede detener, o que ctrl-C hace que el flujo de control para saltar hacia adelante (a la gestión de excepciones), y luego continúan. Entonces, o el código no puede ser interrumpido, o si necesita martillar sobre ctrl-c para conseguir que se detenga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top