【问题标题】:obtaining error number of an error获取错误的错误号
【发布时间】:2010-07-13 20:45:01
【问题描述】:

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

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

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

我得到了输出,

Error: [Errno 21] Is a directory

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

【问题讨论】:

    标签: python error-handling paramiko


    【解决方案1】:

    感谢您澄清您的问题。

    Python 中的大多数Exceptions 没有“错误编号”。一个例外(没有双关语)是HTTPError 例外,例如:

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

    另一个例外(如 bobince 所述)是 EnvironmentErrors:

    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
    

    【讨论】:

    • 这正是我想要的!谢谢,蒂姆。
    • 注意 OSError,看起来这些都是 all None(包括 errno),除非为异常指定了至少两个参数,文件名是可选的第三个参数。
    【解决方案2】:

    如果您谈论的是errno.h 错误编号,您可以从异常对象的errno 属性中获取它们,但仅限于EnvironmentError(包括OSErrorIOErrorWindowsError )。

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

    【讨论】:

      【解决方案3】:

      还有errno 包,它允许处理错误代码而无需处理代码中的幻数。在此处查看示例:Are Python error numbers associated with IOError stable?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-24
        • 2012-05-03
        • 1970-01-01
        • 2016-11-09
        • 1970-01-01
        • 2013-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多