引发异常时调用方法,try块后列出了多个异常

时间:2020-09-12 09:14:01

标签: python python-3.x try-except

嗨,我有代码,其中try块之后有多个异常块,当发生任何异常时,我都希望调用特定的方法。我不想在每个异常中都调用我的方法。

这是我的代码示例

    try:
       print(q)
       a = 8 / 0
    except ZeroDivisionError as z_err:
        new_method(z_err)
        # it's logger operation
    except UnboundLocalError as ub_err:
       new_method(ub_err)
       # it's logger operation
    except NameError as err:
       new_method(err)
       # no log operation.
    except customException1 as err:
       new_method(err)
       # log 2 method

基本上,我的方法需要异常作为参数。在某些例外情况下,我还必须执行某些特定类型的日志操作。并非所有例外都具有记录器操作。

我不想在每个异常中都调用此方法,因为我列出了10个以上的异常。

如果有任何解决方案,请分享。

4 个答案:

答案 0 :(得分:1)

您可以尝试

try:
   print(q)
   a = 8 / 0
except (ZeroDivisionError ,UnboundLocalError, NameError) as err:
   new_method(err)

答案 1 :(得分:1)

如果您想以相同的方式对待所有异常,则可以只使用一个例外,即:

try:
   <your code here>
except Exception as e:
   new_method(e)

但是,最好单独地或根据您的需要处理异常,也可以在您的except块中使用tuple of exceptions。例如,

try:
   <your code here>
except (ValueError, TypeError, ZeroDivisionError) as e:
   new_method(e)

我知道了,因此您可以为所有需要记录的异常创建一个元组,并为不需要的异常创建另一个元组。

答案 2 :(得分:0)

您可以像这样在例外条件内对异常进行分类

    try:
       print(q)
       a = 8 / 0
    except error as err:
       if err is abc:
           new_method(err)
       elif err is xyz:
          new_method2(err)
       ....

答案 3 :(得分:0)

经过大量讨论并回顾了对我的问题的回答,我提出了以下解决方案。

err_mesg = None
try:
   print(q)
   a = 8 / 0
except (ZeroDivisionError, UnboundLocalError) as z_err:
    err_msg = z_err
    # it's logger operation
except (NameError, customException1, customException2) as err:
   err_msg = err
   # no log operation.
except (customException3, customException4) as err:
   err_msg = err
   # logger second operation

if err_msg:
   new_method(err_msg)

这对我的问题来说可能是最好的结果。根据我的研究 谢谢@Abhijith Asokan和@Soma Siddhartha