相同异常的多个异常处理器

1 投票
2 回答
1580 浏览
提问于 2025-04-17 13:21

我有一段代码,其中一个函数是在另一个函数里面被调用的。这是经过重构后的结果。

在被调用的函数里,我有一大块的try-catch语句。

def Called():
     try:
         #All statements for the function in the try block.
     except A:
         # Exception handler.
     except B:
         # Exception handler.
     except A: 
         # Exception handler.

我遇到的问题是,我需要在被调用的函数中捕获两次相同类型的异常(在不同的位置)。然后这些异常会由调用的函数来处理。

一种方法是在被调用的函数里定义两个try-except块。但是我不太明白调用的函数怎么能对两次相同类型的异常进行不同的处理。

2 个回答

0

我觉得这样做应该可以。

def Called():
     try:
         #All statements for the function in the try block.
     except A:
         try: 
             do_someting()
         except B:
             try:
                do_somthing_else()
             except:

     except A: 
         # Exception handler.
4

这样做不会像你想的那样有效;只有第一个 except A 语句会被执行。你需要在这个语句里面加一些逻辑,去进一步检查这个异常,或者(如果 try 块里的代码允许的话)使用多个 try-except 块。

下面是前一种方法的例子:

try:
    something_that_might_fail()
except A as e:
    if e.is_harmless():
        pass
    elif e.is_something_we_can_handle():
        handle_it()
    else:
        raise    # re-raise in the hope it gets handled further up the stack

撰写回答