girona español descargar como bonn actualizar python exception

español - Aumento de la excepción incorporada con el mensaje predeterminado en Python



qgis girona (5)

Estoy intentando implementar un método que devuelve un error cada vez que no existe un directorio determinado.

Sin embargo, en lugar de hacer un raise OSError("Directory does not exist.") , quiero usar el mensaje de error incorporado desde OSError: OSError: [Errno 2] No such file or directory: Esto se debe a que estoy generando la excepción al comienzo de la llamada al método, en lugar de hacerlo más tarde (lo que invocaría el mismo mensaje desde Python, sin ningún raise necesario).

Cualquier punteros? (aparte de hacer OSError("[Errno 2] No such file or directory: ") manualmente OSError("[Errno 2] No such file or directory: ") )


Creo que "excepción" es el término en lenguaje Python para lo que usted llama "error". Así que usa este término cuando busques más información.

Puede resultarle útil leer la documentación de la biblioteca estándar de Python, "6. Excepciones incorporadas" .

OSError es una de las excepciones integradas. Se define en la sección "Excepciones incorporadas", que agrega: "El atributo errno es un código de error numérico de errno, y el atributo strerror es la cadena correspondiente, tal como se imprimirá con la función C perror() . Consulte la módulo errno , que contiene los nombres de los códigos de error definidos por el sistema operativo subyacente ".

Ejecutando este código:

raise OSError(42, "my exception string", "no_such_file.dat")

me da este resultado:

Traceback (most recent call last): Line 1, in <module> raise OSError(42, "my exception string", "no_such_file.dat") OSError: [Errno 42] my exception string: ''no_such_file.dat''

Entonces, creo que tu código podría hacer algo como:

raise OSError(2, "No such file or directory", filename)


Creo que el verdadero problema aquí es que probablemente estés haciendo un montón de controles de antemano en lugar de solo intentarlo.

try: [CODE] except Exception: [HANDLING CODE]

es mucho mejor que

if [SPECIAL CASE]: [HANDLING CODE] elif [special case]: [SPECIAL CASE] [CODE]


Para obtener el mensaje de error para un código de error dado, es posible que desee utilizar os.strerror :

>>> os.strerror(2) ''No such file or directory''

Además, es posible que desee utilizar el módulo errno para usar las abreviaturas estándar para esos errores:

>>> errno.ENOENT 2 >>> os.strerror(errno.ENOENT) ''No such file or directory''


import os try: open(''foo'') except IOError as err: print(err) print(err.args) print(err.filename)

produce

[Errno 2] No such file or directory: ''foo'' (2, ''No such file or directory'') foo

Entonces, para generar un OSError con un uso de mensaje similar

raise OSError(2, ''No such file or directory'', ''foo'')


try: # ... except OSError: raise OSError("your answer")