逗号除了条款

时间:2013-08-30 02:49:27

标签: python try-except

我试过搜索,但找不到任何东西。不过我可能只是没说对了。在我正在阅读的书中。 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是什么。它做了什么,为什么会那样?

4 个答案:

答案 0 :(得分:4)

它为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'>

但根据this question中的答案,as语法直到2.6才被引入。

答案 1 :(得分:1)

exp是将异常对象分配给的变量。引发异常时,Python会创建一个异常对象,其中包含有关错误的更多信息,包括堆栈跟踪并且通常包含错误消息。此代码实际上并不使用exp,因此将其删除会更清晰。

答案 2 :(得分:1)

except: IOError, exp: 

应该是这样的:

except IOError, exp:

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

答案 3 :(得分:0)

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