引发异常时调用方法,try块后列出多个异常
Call Method when exception is raised, there are multiple exception listed after try block
您好,我有一段代码,在 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 个以上的异常。
如果有人有任何解决方案,请分享。
你可以试试这个
try:
print(q)
a = 8 / 0
except (ZeroDivisionError ,UnboundLocalError, NameError) as err:
new_method(err)
如果你想以同样的方式处理所有异常,你可以只使用一个 except 块,即:
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)
我明白了,所以您可以为所有需要记录的异常创建一个元组,为不需要记录的异常创建另一个元组。
你可以像这样对except条件中的异常进行分类
try:
print(q)
a = 8 / 0
except error as err:
if err is abc:
new_method(err)
elif err is xyz:
new_method2(err)
....
经过大量讨论并回顾了对我的问题的回答,我想出了以下解决方案。
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
您好,我有一段代码,在 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 个以上的异常。
如果有人有任何解决方案,请分享。
你可以试试这个
try:
print(q)
a = 8 / 0
except (ZeroDivisionError ,UnboundLocalError, NameError) as err:
new_method(err)
如果你想以同样的方式处理所有异常,你可以只使用一个 except 块,即:
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)
我明白了,所以您可以为所有需要记录的异常创建一个元组,为不需要记录的异常创建另一个元组。
你可以像这样对except条件中的异常进行分类
try:
print(q)
a = 8 / 0
except error as err:
if err is abc:
new_method(err)
elif err is xyz:
new_method2(err)
....
经过大量讨论并回顾了对我的问题的回答,我想出了以下解决方案。
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