2

我试图搜索,但我找不到任何东西。但是,我可能只是没有说对。在我正在阅读的书中。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

4 回答 4

5

它为块内的异常提供了一个变量名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 语法。

于 2013-08-30T02:53:08.237 回答
1

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

于 2013-08-30T02:53:24.407 回答
1
except: IOError, exp: 

应该是这样的:

except IOError, exp:

exp 存储错误消息,因此 exp 的值为: No such file or directory:XXX
你可以将其重命名为其他任何内容

于 2013-08-30T02:57:17.497 回答
0

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

于 2013-08-30T03:07:00.170 回答