Cattura solo alcuni errori di runtime in Python
-
05-07-2019 - |
Domanda
Sto importando un modulo che genera il seguente errore in alcune condizioni: RuntimeError: pyparted richiede l'accesso come root
So che posso solo controllare l'accesso root prima dell'importazione, ma vorrei sapere come individuare questo tipo di errore specifico tramite un'istruzione try / tranne per riferimento futuro. C'è un modo per distinguere tra questo RuntimeError e altri che potrebbero essere sollevati?
Soluzione
So che posso solo controllare l'accesso root prima dell'importazione, ma vorrei sapere come individuare questo tipo di errore specifico tramite un'istruzione try / tranne per riferimento futuro. C'è un modo per distinguere tra questo RuntimeError e altri che potrebbero essere sollevati?
Se l'errore è causato da una condizione specifica, penso che il modo più semplice per rilevare l'errore sia testare la condizione e tu stesso puoi generare un errore più specifico. Dopo tutto, l'errore esiste prima che l'errore venga generato, poiché in questo caso è un problema con l'ambiente.
Sono d'accordo con quelli sopra: la corrispondenza del testo su un errore è una specie di prospettiva terrificante.
Altri suggerimenti
È possibile controllare gli attributi dell'eccezione per differenziarsi dalle altre possibili eccezioni RuntimeError
. Ad esempio, aumentare nuovamente l'errore se non corrisponde a un testo di messaggio predefinito.
try:
import pypatred
except RuntimeError,e:
if e.message == 'RuntimeError: pyparted requires root access':
return 'pyparted - no root access'
raise
Naturalmente, il confronto diretto del testo è solo un esempio, è possibile cercare sottostringhe incluse o espressioni regolari.
Vale la pena notare che l'attributo delle eccezioni .message
è deprecato a partire da Python 2.6 . Puoi trovare il testo in .args
, di solito args [0]
.
... Per 2.6, l'attributo
message
è deprecato a favore dell'attributoargs
.
try:
import pyparted
except RuntimeError:
print('RuntimeError is raised')
raise
ulteriori informazioni su gestione delle eccezioni nel tutorial .
Questa situazione dovrebbe produrre ImportError
secondo me. E puoi farlo tu stesso:
try:
import pyparted
except RuntimeError as e:
raise ImportError(e)
Sì.
try:
import module
except RuntimeError:
pass
le importazioni sono interpretate come qualsiasi altra affermazione, non sono speciali. Potresti fare un
if condition:
import module
try:
import ...
except RuntimeError:
# Do something
RuntimeError Generato quando viene rilevato un errore che non & # 8217; t rientra in una qualsiasi delle altre categorie
def foo():
try:
foo()
except RuntimeError, e:
print e
print " Runtime Error occurred due to exceeded maximum recursion depth "
Questo è il modo in cui cattureremo RuntimeError causato dal limite di ricorsione superato in python
E se vuoi chiamare la tua funzione oltre il limite di ricorsione puoi fare quanto segue
import sys
def foo():
try:
foo()
except RuntimeError, e:
sys.setrecursionlimit(1200)
foo()
Ma è sempre sconsigliato modificare il limite di ricorsione, ma sono ammessi cambiamenti molto piccoli nel limite di ricorsione