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")