2010-07-13 6 views
10

Ho bisogno di ottenere il numero di errore da un errore che si è verificato in Python.ottenendo il numero di errore di un errore

Ex; Quando si cerca di trasferire un directory tramite il pacchetto paramiko, un errore viene catturato con questo pezzo di codice:

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

Per cui ho l'uscita,

Error: [Errno 21] Is a directory 

voglio utilizzare il numero di errore a andare in qualche altro codice per trasferire la directory e il contenuto della directory.

risposta

13

Grazie per aver chiarito la tua domanda.

La maggior parte di Exception s in Python non ha "numeri di errore". Un'eccezione (no pun intended) sono HTTPError eccezioni, ad esempio:

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

Un'altra eccezione (come notato da bobince) sono EnvironmentError s:

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

uscite

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

Questo era esattamente quello che stavo cercando! Grazie, Tim. – fixxxer

+0

Nota per OSError, sembra che questi siano ** tutti None ** (incluso errno) a meno che non siano specificati almeno due argomenti per l'eccezione, con filename che è il terzo argomento opzionale. –

4

Se Stai parlando dei numeri di errore errno.h, puoi ottenerli dalla proprietà errno sull'oggetto eccezione, ma solo su EnvironmentError (che include OSError, IOError e WindowsError).

In particolare su WindowsError si ottiene anche una proprietà winerror con un numero di errore specifico di Windows. (Di solito non si vede uno di questi, poiché Python utilizza direttamente l'API Win32 relativamente raramente.)