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?

È stato utile?

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'attributo args .

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top