in

python: captura múltiples excepciones en una línea (excepto bloque)

apple touch icon@2

¿Cómo capturo varias excepciones en una línea (excepto el bloque)?

Hacer esto:

try:
    may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
    handle(error) # might log or have some other default behavior...

Los paréntesis son obligatorios debido a la sintaxis anterior que usaba las comas para asignar el objeto de error a un nombre. los as La palabra clave se utiliza para la tarea. Puede usar cualquier nombre para el objeto de error, prefiero error personalmente.

Mejores prácticas

Para hacer esto de una manera actual y compatible con Python, debe separar las Excepciones con comas y envolverlas entre paréntesis para diferenciarlas de la sintaxis anterior que asignó la instancia de excepción a un nombre de variable siguiendo el tipo de excepción para ser capturado con un coma.

A continuación, se muestra un ejemplo de uso simple:

import sys

try:
    mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
    sys.exit(0)

Estoy especificando solo estas excepciones para evitar ocultar errores, de los cuales, si encuentro, espero el seguimiento de la pila completa.

Esto se documenta aquí: https://docs.python.org/tutorial/errors.html

Puede asignar la excepción a una variable, (e es común, pero es posible que prefiera una variable más detallada si tiene un manejo de excepciones prolongado o su IDE solo resalta selecciones más grandes que eso, como lo hace el mío). La instancia tiene un atributo args. Aquí hay un ejemplo:

import sys

try:
    mainstuff()
except (KeyboardInterrupt, EOFError) as err: 
    print(err)
    print(err.args)
    sys.exit(0)

Tenga en cuenta que en Python 3, el err objeto queda fuera de alcance cuando el except se concluye el bloque.

Obsoleto

Es posible que vea un código que asigna el error con una coma. Este uso, el único formulario disponible en Python 2.5 y versiones anteriores, está obsoleto, y si desea que su código sea compatible con versiones posteriores en Python 3, debe actualizar la sintaxis para usar el nuevo formulario:

import sys

try:
    mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
    print err
    print err.args
    sys.exit(0)

Si ve la asignación de nombre de coma en su base de código y está usando Python 2.5 o superior, cambie a la nueva forma de hacerlo para que su código siga siendo compatible cuando actualice.

los suppress administrador de contexto

La respuesta aceptada es realmente 4 líneas de código, mínimo:

try:
    do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
    pass

los try, except, pass Las líneas se pueden manejar en una sola línea con el suprimir el administrador de contexto, disponible en Python 3.4:

from contextlib import suppress

with suppress(IDontLikeYouException, YouAreBeingMeanException):
     do_something()

Entonces cuando quieras pass en determinadas excepciones, utilice suppress.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

JavaScript – Funciones

nekv8uEibUtPva2qhjys9M 1200 80

Eliminación de moho – Tutorial de control: una guía paso a paso para ayudarlo a completar el control