2010-07-13 9 views
10

Necesito obtener el número de error de un error que ha ocurrido en Python.obteniendo el número de error de un error

Ex; Al intentar transferir un directorio a través del paquete de paramiko, un error es capturado con este pedazo de código:

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

Por lo que me da la salida,

Error: [Errno 21] Is a directory 

Quiero utilizar el número de error de ingrese un código más para transferir el directorio y el contenido del directorio.

Respuesta

13

Gracias por aclarar su pregunta.

La mayoría de los Exception s en Python no tienen "números de error". Una excepción (sin doble sentido) son HTTPError excepciones, por ejemplo:

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

Otra excepción (como se ha señalado por bobince) son EnvironmentError s:

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

salidas

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

¡Esto era exactamente lo que estaba buscando! Gracias, Tim. – fixxxer

+0

Nota para OSError, parece que estos son ** todos Ninguno ** (incluido errno) a menos que se especifiquen al menos dos args para la excepción, con nombre de archivo como tercer argumento opcional. –

4

Si Están hablando de los números de error errno.h, puede obtenerlos de la propiedad errno en el objeto de excepción, pero solo en EnvironmentError (que incluye OSError, IOError y WindowsError).

Específicamente en WindowsError también obtendrá una propiedad winerror con un número de error específico de Windows. (Sin embargo, a menudo no ve uno de estos, ya que Python usa la API de Win32 relativamente pocas veces).

Cuestiones relacionadas