Captura solo algunos errores de tiempo de ejecución en Python
-
05-07-2019 - |
Pregunta
Estoy importando un módulo que genera el siguiente error en algunas condiciones: RuntimeError: pyparted requiere acceso de root
Sé que puedo verificar el acceso a la raíz antes de la importación, pero me gustaría saber cómo detectar este tipo de error específico mediante una declaración try / except para futuras referencias. ¿Hay alguna manera de diferenciar entre este RuntimeError y otros que podrían surgir?
Solución
Sé que puedo verificar el acceso a la raíz antes de la importación, pero me gustaría saber cómo detectar este tipo de error específico mediante una declaración try / except para futuras referencias. ¿Hay alguna manera de diferenciar entre este RuntimeError y otros que podrían surgir?
Si el error es causado por una condición específica, entonces creo que la forma más fácil de detectar el error es probar la condición, y usted mismo puede generar un error más específico. Después de que todo el 'error' existe antes de que se lance el error, ya que en este caso es un problema con el medio ambiente.
Estoy de acuerdo con los anteriores: la coincidencia de texto en un error es una perspectiva aterradora.
Otros consejos
Puede verificar los atributos de la excepción para diferenciarlos de otras posibles excepciones RuntimeError
. Por ejemplo, vuelva a generar el error si no coincide con un texto de mensaje predefinido.
try:
import pypatred
except RuntimeError,e:
if e.message == 'RuntimeError: pyparted requires root access':
return 'pyparted - no root access'
raise
Por supuesto, la comparación directa de texto es solo un ejemplo, puede buscar subcadenas incluidas o expresiones regulares.
Vale la pena señalar que el atributo .message
de las excepciones es en desuso comenzando con Python 2.6 . Puede encontrar el texto en .args
, generalmente args [0]
.
... Para 2.6, el atributo
message
está en desuso a favor del atributoargs
.
try:
import pyparted
except RuntimeError:
print('RuntimeError is raised')
raise
más información sobre manejo de excepciones en el tutorial .
Esta situación debería producir ImportError
en mi opinión. Y puedes hacerlo tú mismo:
try:
import pyparted
except RuntimeError as e:
raise ImportError(e)
Sí.
try:
import module
except RuntimeError:
pass
las importaciones se interpretan como cualquier otra declaración, no son especiales. Podrías hacer un
if condition:
import module
try:
import ...
except RuntimeError:
# Do something
RuntimeError Se produce cuando se detecta un error que no aparece en # 8217; no caerá en ninguna de las otras categorías
def foo():
try:
foo()
except RuntimeError, e:
print e
print " Runtime Error occurred due to exceeded maximum recursion depth "
Así es como detectaremos el RuntimeError causado por el límite de recursión excedido en python
Y si desea llamar a su función por encima del límite de recursión, puede hacer lo siguiente
import sys
def foo():
try:
foo()
except RuntimeError, e:
sys.setrecursionlimit(1200)
foo()
Pero siempre es altamente recomendable cambiar el límite de recursión, pero se permiten cambios muy pequeños en el límite de recursión