gpt4 book ai didi

error-handling - 分配默认值的 Pythonic 方式

转载 作者:太空狗 更新时间:2023-10-29 17:06:09 27 4
gpt4 key购买 nike

考虑这一行:

some_value = lst.attr[idx]

这里有两个可能的错误,attr可能不存在,idx可能超出范围。

有什么优雅的方法可以减少这条语句吗?理想情况下,像这样:

some_value = lst.attr[idx] or default_value

(不要在家里尝试。这只适用于正确定义的表达式。)

当然可以:

try:
some_value = lst.attr[idx]
except:
some_value = default_value

但是如果我在作业的上下文中怎么办?例如:

print [x.attr[idx] for x in y]

在这种情况下,处理错误和分配默认值的 Pythonic 方式是什么?

最佳答案

您需要在这里决定您要实现的目标。使用“错误”一词可能会产生误导。

如果您实际上正在尝试处理将错误类型的对象传递给您的函数的情况,那么您不想处理它并且应该引发异常。

如果您试图让您的函数用于一系列不同的类型,那么这并不是真正的错误,使用默认值可能是合理的。

最简单的选择是先测试属性是否存在。例如:

if hasattr(lst, "attr"):
attr = lst.attr
else:
attr = {}

我假设 lst.attr 是一个字典,在这种情况下您可以像这样处理默认值:

lst.attr.get(idx, default_value)

切勿在未指定要捕获的异常的情况下使用 try/except 语句。您最终掩盖的可能比您预期的要多得多。

对于你的最后一段代码,我认为你不应该尝试在一行中解决它。可读性很重要。我对下面的代码不满意,但如果将 xyattr 替换为更具描述性的名称,它会得到改进。

attrs = [(x.attr if hasattr(x) else {}) for x in y]

print [attr.get(idx, default_value) for attr in attrs]

关于error-handling - 分配默认值的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8324620/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com