2010-07-13 13 views
10

Ich muss die Fehlernummer von einem Fehler erhalten, der in Python aufgetreten ist.Ermitteln der Fehlernummer eines Fehlers

Ex; Wenn Sie ein Verzeichnis über das paramiko Paket zu übertragen versucht, wird ein Fehler mit diesem Stück Code gefangen:

try: 
    sftp.put(local_path,target_path)  
except (IOError,OSError),errno: 
    print "Error:",errno 

für die ich die Ausgabe zu erhalten,

Error: [Errno 21] Is a directory 

Ich möchte die Fehlernummer nutzen gehen Sie in etwas mehr Code, um das Verzeichnis und den Verzeichnisinhalt zu übertragen.

Antwort

13

Danke für die Klärung Ihrer Frage.

Die meisten Exception s in Python haben keine "Fehlernummern". Eine Ausnahme (kein Wortspiel beabsichtigt) sind HTTPError Ausnahmen, zum Beispiel:

import urllib2 
try: 
    page = urllib2.urlopen("some url") 
except urllib2.HTTPError, err: 
    if err.code == 404: 
     print "Page not found!" 
    else: 
     ... 

Eine weitere Ausnahme (wie durch bobince angegeben) sind EnvironmentError s:

import os 
try: 
    f=open("hello") 
except IOError, err: 
    print err 
    print err.errno 
    print err.strerror 
    print err.filename 

Ausgänge

[Errno 2] No such file or directory: 'hello' 
2 
No such file or directory 
hello 
+0

Das war genau das, was ich gesucht habe! Danke, Tim. – fixxxer

+0

Hinweis für OSError, es sieht so aus als wären sie ** all None ** (einschließlich errno), es sei denn, mindestens zwei Argumente sind für die Ausnahme angegeben, wobei Dateiname das optionale dritte Argument ist. –

4

Wenn Sie über errno.h Fehlernummern sprechen, können Sie sie von der errno Eigenschaft auf dem Ausnahmeobjekt erhalten, aber nur auf EnvironmentError (einschließlich OSError, IOError und WindowsError).

Speziell unter WindowsError erhalten Sie auch eine winerror-Eigenschaft mit einer Windows-spezifischen Fehlernummer. (Sie sehen jedoch nicht oft eine davon, da Python die Win32-API relativ selten direkt verwendet.)

Verwandte Themen