Pegar apenas alguns erros de execução em Python
-
05-07-2019 - |
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?
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 atributoargs
.
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