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?

¿Fue útil?

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 atributo args .

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

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