2011-01-13 7 views
5

Ich habe den folgenden Code:OSError Dateiname Attribut nicht verfügbar?

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

Es läuft sehr gut, es sei denn es OSError num erfüllt. 123 (The file name, directory name, or volume label syntax is incorrect). dann bekomme ich die folgenden Fehler bei dem außer Codezeile:

ValueError: need more than 2 values to unpack 

Es ist gelöst, indem nicht das filename Attribut. Meine Anforderungen hindern mich jedoch daran, dieses Attribut nicht zu verwenden.

Gibt es einen anderen Weg?

Antwort

24

Ich habe diese Art der Ausnahmebehandlung nicht gesehen, wo Sie die Attribute des Ausnahmeobjekts an die as-Klausel übergeben.

Normalerweise behandeln Sie except ExceptionObject as e und behandeln die Attribute, wie man normalerweise die Attribute eines Objekts behandeln würde.

OSError enthält ein Fehlernummer-Attribut ist ein numerischer Fehlercode von Fehlernummern und das Strerror-Attribut ist die entsprechende Zeichenfolge und für Ausnahmen, die einen Dateisystempfad beinhalten (wie chdir() oder unlink()), wird die Ausnahmeinstanz ein drittes Attribut, Dateiname, enthalten, bei dem es sich um den Dateinamen handelt, der an die Funktion übergeben wird.

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

"Ich habe diese Art der Ausnahmebehandlung nicht gesehen" = netteste Art zu sagen, dass Sie es falsch machen. – marr75

+0

Danke. es funktionierte! – Alex58

Verwandte Themen