Pergunta

Eu estou importando um módulo que gera o seguinte erro em algumas condições: RuntimeError: pyparted requer acesso root

Eu sei que eu posso apenas verificar se há acesso root antes da importação, mas eu gostaria de saber como pegar esse tipo spesific de erro através de um try / exceto declaração para referência futura. Existe alguma maneira de diferenciar entre este RuntimeError e outras que possam ser levantadas?

Foi útil?

Solução

Eu sei que eu posso apenas verificar se há acesso root antes da importação, mas eu gostaria de saber como pegar esse tipo spesific de erro através de um try / exceto declaração para referência futura. Existe alguma maneira de diferenciar entre este RuntimeError e outras que possam ser levantadas?

Se o erro é causado por uma condição específica, então eu acho que a maneira mais fácil de capturar o erro é testar para a doença, e você pode levantar um erro mais específica si mesmo. Depois de todo o 'erro' existe antes de o erro é lançado, já que neste caso é um problema com o meio ambiente.

Eu concordo com os que estão acima -. Texto correspondente em um erro é uma espécie de uma perspectiva aterrorizante

Outras dicas

Você pode verificar atributos de exceção para diferenciar de outras exceções RuntimeError possíveis. Por exemplo, re-raise o erro se ele não coincidir com uma mensagem de texto pré-definido.

    try:
        import pypatred
    except RuntimeError,e:
        if e.message == 'RuntimeError: pyparted requires root access':
            return 'pyparted - no root access'
        raise

Claro, comparação de texto direto é apenas um exemplo, você poderia procurar substrings incluídos ou expressões regulares.

Vale a pena notar que o atributo .message de exceções é deprecated começando com o Python 2,6 . Você pode encontrar o texto em .args, geralmente args[0].

... Para 2.6, o atributo message está sendo preterido em favor do atributo args.

try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise

tratamento de exceção no tutorial .

Esta situação deve produzir ImportError na minha opinião. E você pode fazê-lo sozinho:

try:
    import pyparted
except RuntimeError as e:
    raise ImportError(e)

Sim.

   try:
        import module
   except RuntimeError:
         pass

importações são interpretados como qualquer outra declaração, eles não são especiais. Você poderia fazer um

if condition:
     import module
try:
   import ...
except RuntimeError:
   # Do something

RuntimeError Gerado quando é detectado um erro que doesn' t cair em nenhuma das outras categorias

def foo():
   try:
      foo()
   except RuntimeError, e:
      print e
      print " Runtime Error occurred due to exceeded maximum recursion depth "

É assim que vai pegar o RuntimeError causado pelo limite de recursão ultrapassado em python

E se você quiser chamar sua função sobre o limite de recursão que você pode fazer o seguinte

import sys
def foo():
     try:
        foo()
     except RuntimeError, e:
        sys.setrecursionlimit(1200)
        foo()

Mas sempre é altamente não recomendável para alterar o limite de recursividade, mas muito pequenas mudanças no limite de recursão são permitidos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top