首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >try/except中except的动态数量

try/except中except的动态数量
EN

Stack Overflow用户
提问于 2020-09-24 18:53:08
回答 1查看 31关注 0票数 0

我想创建一个以function作为参数和元组列表的函数。元组的第一个元素是错误,第二个元素是消息。示例调用:

代码语言:javascript
复制
handle_error(sum, [(ValueError, 'bad value'), (AttributeError, 'attribute error')])

此错误应在try/except块中处理。我猜不可能动态定义异常的数量。执行下面伪代码示例中演示的操作的最佳实践是什么?

代码语言:javascript
复制
def handle_error(function, errors):
    try:
        function()
    for error in errors:
        except error[0] as e:
           print(error[1])

我想实现这样的行为,以使我的应用程序中的日志记录更干净。

EN

回答 1

Stack Overflow用户

发布于 2020-09-24 19:25:04

由于Exception%s是可散列的,请使用dict

代码语言:javascript
复制
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), {ValueError: "bad val", AttributeError: "bad attr"})
代码语言:javascript
复制
bad val
bad attr

正如我所看到的,你调用函数时不带参数,我从处理程序中删除了callable的参数。您仍然可以像上面那样使用lambda传递参数,但最好更改处理程序的签名,如下所示:

代码语言:javascript
复制
def handle_error(callable_: Callable, error_dict: dict, *args):
    try:
        callable_(*args)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64044939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档