【发布时间】:2012-03-12 07:07:07
【问题描述】:
我创建了一堆函数,我需要在所有函数中都使用非常相似的 except 子句,但我讨厌有这么多行 try 和 except 子句以及每个函数内部的相同代码。例如:
import sys
import random
def foo():
num=random.random()
try:
if num>0.5: print 'OK'
elif num>0.25: raise NameError('Too Small')
else: raise KeyboardInterrupt
except NameError:
print "%s had a NameError" % sys._getframe().f_code.co_name
except:
print "%s had a different Error" % sys._getframe().f_code.co_name
def bar():
num=random.random()
try:
if num>0.8: print 'OK'
elif num>0.6: raise NameError('Too Small')
else: raise KeyboardInterrupt
except NameError:
print "%s had a NameError" % sys._getframe().f_code.co_name
except:
print "%s had a different Error" % sys._getframe().f_code.co_name
“try”后的代码因功能而异,但“except”后的代码相同。我想合并那些 except 语句,这样它们就不会让我的代码看起来那么拥挤。有什么好办法吗?
【问题讨论】:
-
捕获任何异常通常是一个非常糟糕的主意。它掩盖了真正的问题并使调试更加困难。捕捉任何你知道的异常——如果你不知道它们,你真的想捕捉它们吗?
-
这很好。如果函数失败,我确实需要脚本继续。最后一个“例外”包括
print sys.exc_info()[:2],其中包括异常的名称。有没有更好的方法来做到这一点?