6

我有:

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)
4

2 回答 2

10

我认为这是一个糟糕的设计。如果您需要在(且仅当)未引发异常时采取一些措施,这就是该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中。

于 2012-09-12T18:22:20.470 回答
4

我认为你正在做的是“unPythonic”。尝试实际上应该只涵盖您期望有时可能会以某种方式失败的代码的一小部分(理想情况下是一行)。您应该能够使用 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)
于 2012-09-12T18:22:33.167 回答