这是使用 Python 'with' 语句时捕获异常的问题的延续。
我是个新手,我在 GNU/linux 上使用 Python 3.2 测试了以下代码。
在上述问题中,提出了与此类似的方法来从“with”语句中捕获异常:
try:
with open('foo.txt', 'a'):
#
# some_code
#
except IOError:
print('error')
这让我想知道:如果 some_code 引发 IOError 而不捕获它会发生什么?它显然被外部的'except'语句所捕获,但这不是我真正想要的。
你可以说好的,只需用另一个 try-except 包装 some_code,等等,但我知道异常可能来自任何地方,不可能保护每一段代码。
总而言之,我只想打印 'error' 当且仅当 open('foo.txt', 'a') 引发异常,所以我在这里问为什么以下代码不是标准建议的方式这样做:
try:
f = open('foo.txt', 'a')
except IOError:
print('error')
with f:
#
# some_code
#
#EDIT: 'else' statement is missing, see Pythoni's answer
谢谢!