Python 获取错误的错误号

Python 获取错误的错误号,python,error-handling,paramiko,Python,Error Handling,Paramiko,我需要从Python中发生的错误中获取错误号 前;尝试通过Paramiko包传输目录时,发现以下代码错误: try: sftp.put(local_path,target_path) except (IOError,OSError),errno: print "Error:",errno 我得到了它的输出 Error: [Errno 21] Is a directory 我想利用错误号进入更多代码以传输目录和目录内容。感谢您澄清您的问题 Python中的大多数Exce

我需要从Python中发生的错误中获取错误号

前;尝试通过Paramiko包传输目录时,发现以下代码错误:

try:
    sftp.put(local_path,target_path)    
except (IOError,OSError),errno:
    print "Error:",errno
我得到了它的输出

Error: [Errno 21] Is a directory

我想利用错误号进入更多代码以传输目录和目录内容。

感谢您澄清您的问题

Python中的大多数
Exception
s没有“错误号”。一个异常(无双关语)是
HTTPError
异常,例如:

import urllib2 
try:
   page = urllib2.urlopen("some url")
except urllib2.HTTPError, err:
   if err.code == 404:
       print "Page not found!"
   else:
       ...
另一个例外情况(如bobince所述)是
EnvironmentError
s:

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

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

如果您谈论的是
errno.h
错误号,则可以从异常对象上的
errno
属性获取它们,但只能在
EnvironmentError
(其中包括
OSError
IOError
WindowsError
)上获取


特别是在
WindowsError
上,您还将获得一个带有Windows特定错误号的
winerror
属性。(不过,您并不经常看到其中一个,因为Python直接使用Win32 API的情况相对较少。)

还有一个软件包,它允许处理错误代码,而不必处理代码中的幻数。这里有一个例子:

这正是我想要的!谢谢,Tim。注意,对于OSError,除非至少为异常指定了两个参数(filename是可选的第三个参数),否则这些参数看起来都是None(包括errno)。