检测引发异常的原因

Detect what raises an exception

我制作了一个 Python 2.7.9 脚本,它使用 urllib.urlretrieve 从网上下载一些照片。我使用 tryexcept 命令做了一个简单的错误听写,如下所示:

try:
    urllib.urlretrieve("http://example.com/image.jpg", "1.jpg")
except IOError:
    print "Could not connect to 'example.com'!"

但是,我意识到当硬盘驱动器上没有 space 时,也可以引发 IOError。我想检测引发 IOError 的原因(无法连接到 example.com/no space left),并显示正确的错误消息。

我该怎么做?谢谢!

正如 zoosuck 所说,您可以通过多个 except-Statement 来区分错误。如果您想区分 IOError,请查看 IOError 的文档。它揭示了 IOError 有一个属性 "errno"。您可以使用 errno 模块 (https://docs.python.org/2/library/errno.html) 来确定原因:

import urllib
import errno

try: 
    urllib.urlretrieve("http://example.com/image.jpg", "1.jpg")     
except IOError, e:
    if e.errno == errno.ENOSPC:
        print "No space left on device"
    else:
        print "Could not connect to 'example.com'!"