如何显示有关错误的信息?

时间:2014-02-19 10:20:40

标签: python python-3.x

请帮助显示错误消息。

def download(path, name):
    #urllib.URLopener().retrieve(prefix + path, name)
    img = urllib.request.urlopen(prefix + path).read()
    try:
        f = open(name, "wb")
        f.write(img)
    except PermissionError:
        print('PermissionError')
    except:
        print(error)
    finally:
        f.close()  

如果写入失败,则脚本写入

  

PermissionError

但如果还有其他错误,我需要显示有关错误的完整信息。不是

  

错误

可以实施吗?

2 个答案:

答案 0 :(得分:2)

def download(path, name):
    #urllib.URLopener().retrieve(prefix + path, name)
    img = urllib.request.urlopen(prefix + path).read()
    try:
        f = open(name, "wb")
        f.write(img)
    except PermissionError:
        print('PermissionError')
    except Exception as exc:
        print(exc)
    finally:
        f.close()  

但抓住像这样的任何和所有例外并不是一个好主意; 捕获您期望的异常。如果发生了非常糟糕的事情,那些异常应该传播给用户,程序真的应该停在那里。

实际上,如果您想要更多的failave文件打开,请通过with语句使用上下文管理器:

with open(name, "wb") as f:
    <do stuff>
<done here>

文件f会以这种方式自动关闭;不用担心finally声明。

答案 1 :(得分:2)

你可以这样做:

try:
    …
except PermissionError:
    print('PermissionError')
except Exception as e:
    print(e)

请注意,您不应仅仅catch all exceptions这样。特别是对于文件操作,您可以轻松选择OSError作为尝试打开文件时可能发生的最常见的异常,同时在其中留下其他关键异常。

此外,使用with首选手动关闭文件。无论您是否收到任何异常,这也可以确保文件已关闭:

def download (path, name):
    img = urllib.request.urlopen(prefix + path).read()
    try:
        with open(name, "wb") as f:
            f.write(img)
    except PermissionError:
        print('PermissionError')