2011-01-13 15 views
5

Mam następujący kod:Atrybut pliku OSError jest niedostępny?

except(OSError) as (errno, strerror, filename): 
print "OSError [%d]: %s at %s" % (errno, strerror, filename) 

Działa świetnie, chyba że spełnia OSError num. 123 (The file name, directory name, or volume label syntax is incorrect). Następnie pojawia się następujący błąd u wyjątkiem linii kodu:

ValueError: need more than 2 values to unpack 

To nie jest rozwiązany przez użycie atrybutu filename. Jednak moje wymagania uniemożliwiają mi nie używanie tego atrybutu.

Czy istnieje inny sposób?

Odpowiedz

24

Nie widziałem tego rodzaju obsługa wyjątków, gdzie jesteś przechodzącą atrybuty obiekt wyjątku do AS klauzuli.

Normalnie obsługiwać except ExceptionObject as e i uchwyt atrybuty jak można by normalnie obsługiwać atrybutów obiektu.

OSError zawiera atrybut errno to numeryczny kod błędu z errno, a atrybut strerror jest odpowiadającym ciągiem znaków, a dla wyjątków obejmujących ścieżkę do systemu plików (taką jak chdir() lub unlink()), wystąpienie wyjątku będzie zawierają trzeci atrybut, nazwapliku, który jest nazwą pliku przekazaną do funkcji.

import os 
try: 
    os.chdir('somenonexistingdir') 
except OSError as e: 
    print e.errno 
    print e.filename 
    print e.strerror 
+9

"Nie widziałem takiego sposobu obchodzenia się z wyjątkami" = najprzyjemniejszy sposób powiedzenia, że ​​robisz to źle. – marr75

+0

Dzięki. zadziałało! – Alex58

Powiązane problemy