繁体   English   中英

除外条款中的逗号

[英]Comma in except clause

我尝试搜索,但找不到任何东西。 但是我可能只是说错了。 在书中,我正在阅读。 Dave Kuhlman的Python书他写了try:except语句来捕获IOError。

def test():
    infilename = 'nothing.txt'
    try:
        infile = open(infilename, 'r')
        for line in infile:
            print line
    except IOError, exp:
        print 'cannot open file "%s"' % infilename

我的问题是IOError之后的exp是多少。 它是做什么的,为什么在那里?

它为except块内的异常提供了一个变量名:

>>> try:
...     raise Exception('foo')
... except Exception, ex:
...     print ex
...     print type(ex)
...
foo
<type 'exceptions.Exception'>

我个人发现as语法更加清晰:

>>> try:
...     raise Exception('foo')
... except Exception as ex:
...     print ex
...     print type(ex)
...
foo
<type 'exceptions.Exception'>

但是根据该问题的答案,直到2.6才引入as语法。

exp是将异常对象分配给的变量。 引发异常时,Python创建一个异常对象,该对象包含有关错误的更多信息,包括堆栈跟踪,通常还包含错误消息。 这段代码实际上并没有使用exp ,因此将其省略会更干净。

except: IOError, exp: 

应该是这样的:

except IOError, exp:

exp存储错误msg,因此exp的值为:没有这样的文件或目录:XXX
您可以将其重命名为其他任何名称

它包含错误消息,堆栈跟踪以及有关该错误的其他信息。 尽管该特定代码摘录实际上并未使用该信息,但它在生产环境中是有意义的,在生产环境中,错误日志记录对于调试很重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM