ami*_*mit 11 python exception-handling
一个python新手问题:我需要做以下事情
try:
do-something()
except error1:
...
except error2:
...
except:
...
#Here I need to do something if any exception of the above exception was thrown.
Run Code Online (Sandbox Code Playgroud)
我可以设置一个标志并执行此操作.但是有更清洁的方法吗?
实际上我不喜欢标志并认为它们是最后的解决方案。在这种情况下我会考虑这样的事情:
def f():
try:
do_something()
except E1:
handle_E1()
except E2:
handle_E2()
else:
return
do_stuff_to_be_done_in_case_any_exception_occurred()
Run Code Online (Sandbox Code Playgroud)
当然,这只是您可以带着else:箱子返回的情况下的一种选择。
另一种选择可能是重新抛出异常并重新捕获它以进行更一般的错误处理。这甚至可能是最干净的方法:
def f():
try: # general error handling
try: # specific error handling
do_something()
except E1:
handle_E1()
raise
except E2:
handle_E2()
raise
except (E1, E2):
do_stuff_to_be_done_in_case_any_exception_occurred()
Run Code Online (Sandbox Code Playgroud)
您可以使用嵌套来执行此操作。外部块try.应该捕获所有异常。它的主体是另一个立即重新引发异常的主体。内部的块实际上处理各个异常。您可以使用内部的块来执行您想要的操作:在任何异常之后运行某些内容,但仅在异常之后运行。excepttrytryexcepttryfinallytry
这是一个小的交互式示例(出于怀旧目的,以 Applesoft BASIC 为模型)。
try:
input("]") # for Python 3: eval(input("]"))
except:
try:
#Here do something if any exception was thrown.
raise
except SyntaxError:
print "?SYNTAX",
except ValueError:
print "?ILLEGAL QUANTITY",
# additional handlers here
except:
print "?UNKNOWN",
finally:
print "ERROR"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3325 次 |
| 最近记录: |