【发布时间】:2017-01-24 09:57:18
【问题描述】:
我做这样的事情是不是很愚蠢?我觉得我可能无法从根本上理解try catch 块的目的。
我有一个脚本,我想在守护进程上自动运行,有时会检查列表中的某些资源是否已完全分配。如果资源被完全分配,它不能继续做一件事,但它可以做其他事情。因为我也是从 API 调用某些东西,所以有时 API 抛出的 Exception 非常通用(就像 API_Exception 一样)。在这种情况下做多个 try 块毫无意义吗?
主要问题是break 不允许我跳出循环
for:
try:
stuff()
except ExceptionA:
handle()
break
except ExceptionB:
report()
sys.exit()
try:
other_stuff()
except ExceptionA:
handle_in_a_different_way()
break
except ExceptionC:
report()
sys.exit()
other_code_that_should_execute_if_there_is_a_break()
在这种情况下,我是否应该将这两个块组合起来并捕获一次ExceptionA? ExceptionA 可能没有容易解析的参数。
for:
try:
stuff()
other_stuff()
except ExceptionA:
if ExceptionA has param
handle()
elif ExceptionA has other param
handle_in_a_different_way()
except ExceptionB:
report()
sys.exit()
except ExceptionC:
report()
sys.exit()
【问题讨论】:
-
在后一种情况下,您可以将
except (ExceptionB,ExceptionC):分组。