如何解决try / except中的除外动态数
我想创建一个将函数作为参数和元组列表的函数。元组的第一个元素是错误,第二个元素是消息。示例调用:
handle_error(sum,[(ValueError,'bad value'),(AttributeError,'attribute error')])
该错误应在try / except块中处理。我想不可能动态定义例外数量。进行下面的伪代码示例所示的最佳操作的最佳实践是什么?
def handle_error(function,errors):
try:
function()
for error in errors:
except error[0] as e:
print(error[1])
我想要实现这种行为,以使应用程序中的日志记录更加简洁。
解决方法
使用dict
,因为Exception
是可哈希的。
from collections.abc import Callable # just for type hinting.
def handle_error(callable_: Callable,error_dict: dict):
try:
callable_()
except Exception as err:
print(error_dict[type(err)])
# Testers
def tester(error_type):
raise error_type()
# Test
handle_error(lambda: tester(ValueError),{ValueError: "bad val",AttributeError: "bad attr"})
handle_error(lambda: tester(AttributeError),AttributeError: "bad attr"})
bad val
bad attr
如我所见,您调用了不带参数的函数,因此我从处理程序中删除了可调用的参数。您仍然可以像上面一样使用lambda
传递参数,但是最好按以下方式更改处理程序的签名:
def handle_error(callable_: Callable,error_dict: dict,*args):
try:
callable_(*args)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。