2016-06-07 11 views
8

Desidero lavorare con il messaggio di errore da un'eccezione ma non riesco a convertirlo in una stringa. Ho letto la pagina man della libreria os ma qualcosa non sta facendo clic per me.Converti errore di eccezione nella stringa

Stampa l'errore funziona:

try: 
    os.open("test.txt", os.O_RDONLY) 
except OSError as err: 
    print ("I got this error: ", err) 

Ma questo non lo fa:

try: 
    os.open("test.txt", os.O_RDONLY) 
except OSError as err: 
    print ("I got this error: " + err) 

TypeError: Can't convert 'FileNotFoundError' object to str implicitly 

risposta

10

Da the docs for print()

Tutti gli argomenti non-parole chiave vengono convertite in stringhe come str() fa e scritto nello stream

Quindi, nel primo caso, il tuo errore viene convertito in una stringa dal print integrato, mentre nessuna conversione avviene quando cerchi di concatenare il tuo errore su una stringa. Quindi, per replicare il comportamento di passare il messaggio e l'errore come argomenti separati, è necessario convertire il proprio errore in una stringa con str().

+5

Pertanto wrapping err in str() come in str (err) funziona. Grazie. – dpetican

+0

Sì, precisamente. Prego. – miradulo

+0

Il problema è che solo "stampa" il messaggio di errore ma non il tipo di errore. Come stampiamo sia il tipo che il messaggio nel codice funzione, proprio come fa Python? –

-1

Nella mia esperienza ciò che si desidera è repr(err), che restituirà sia il tipo di eccezione che il messaggio.

str(err) dà solo il messaggio.