2016-06-07 16 views
8

Chcę pracować z komunikatem o błędzie z wyjątku, ale nie mogę go przekonwertować na ciąg. Czytałem stronę podręcznika biblioteki os, ale coś mi nie klika.Konwertuj błąd wyjątku na ciąg

Drukowanie błędu działa:

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

Ale tego nie robi:

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 

Odpowiedz

10

Od the docs for print()

Wszystkie argumenty nie słów kluczowych są konwertowane na ciągi znaków, takich jak str() nie i napisany do strumienia

W pierwszym przypadku błąd jest konwertowany na ciąg znaków przez wbudowaną wersję print, a konwersja taka nie ma miejsca, gdy po prostu próbuje się połączyć błąd z łańcuchem znaków. Tak więc, aby replikować zachowanie przekazywania komunikatu i błędu jako oddzielnych argumentów, musisz przekonwertować swój błąd na ciąg znaków o numerze str().

+5

Dlatego zawijanie err w działaniu str() jak w str (err) działa. Dzięki. – dpetican

+0

Tak, właśnie. Nie ma za co. – miradulo

+0

Problem polega na tym, że "drukuje" tylko komunikat o błędzie, ale nie typ błędu. W jaki sposób wydrukujemy zarówno typ, jak i wiadomość w krótkim kodzie, tak jak robi to Python? –

-1

Z mojego doświadczenia wynika, że ​​użytkownik chce uzyskać zarówno typ wyjątku, jak i komunikat: repr(err).

str(err) nadaje tylko wiadomość.