我有:
try:
...
except Exception, e:
print "Problem. %s" % str(e)
但是,在尝试的某个地方,我需要它表现得好像遇到了异常。这样做是不是pythonic:
try:
...
raise Exception, 'Type 1 error'
...
except Exception, e:
print "Problem. Type 2 error %s" % str(e)
答案 0 :(得分:8)
我认为这是一个糟糕的设计。如果(如果没有)引发异常,则需要执行某些操作,这就是else
子句的用途。如果您需要无条件地采取某些行动,那就是finally
的用途。这是一个示范:
def myraise(arg):
try:
if arg:
raise ValueError('arg is True')
except ValueError as e:
print(e)
else:
print('arg is False')
finally:
print("see this no matter what")
myraise(1)
myraise(0)
您需要将无条件代码计入finally
并将其他内容放入except
/ else
中。
答案 1 :(得分:4)
我认为你所做的是“unPythonic”。 Trys应该只覆盖您期望有时可能以某种方式失败的代码的小部分(理想情况下是一行)。您应该能够使用try / except / else / finally来获取所需的行为:
try:
#line which might fail
except ExceptionType: # the exception type which you are worried about
#what to do if it raises the exception
else:
#this gets done if try is successful
finally:
#this gets done last in both cases (try successful or not)