我在python
中有一些异常处理代码,其中可以引发两个异常,第一个异常是第二个的“超集”。
即。以下代码总结了我需要做的事情(并且工作正常)
try:
normal_execution_path()
except FirstError:
handle_first_error()
handle_second_error()
except SecondError:
handle_second_error()
但是它要求我将所有内容抽象为独立的函数,以使代码保持干净和可读。我正在跳过一些更简单的语法,如:
try:
normal_execution_path()
except FirstError:
handle_first_error()
raise SecondError
except SecondError:
handle_second_error()
但这似乎不起作用(SecondError
如果在此块中引发则不会被重新捕获)。那方面有什么可行的吗?
答案 0 :(得分:0)
如果您希望手动抛出要处理的第二个错误,可以使用嵌套的try-catch块,如下所示:
try:
normal_execution_path()
except FirstError:
try:
handle_first_error()
raise SecondError
except SecondError:
handle_second_error()
except SecondError:
handle_second_error()
答案 1 :(得分:-1)
也许值得回顾一下代码架构。但是对于你的具体情况:
创建一个处理此类错误的泛型类。从第一个和第二个错误情况继承它。为此类错误创建处理程序。在处理程序中,检查第一个或第二个特例并用瀑布处理它。
class SupersetException(Exception):
pass
class FirstError(SupersetException):
pass
class SecondError(SupersetException):
pass
def normal_execution_path():
raise SecondError
def handle_superset_ex(state):
# Our waterfall
# We determine from whom the moment to start processing the exception.
if type(state) is FirstError:
handle_first_error()
# If not the first, the handler above will be skipped
handle_second_error()
try:
normal_execution_path()
except SupersetException as state:
handle_superset_ex(state)
然后开发这个想法。