【发布时间】:2011-11-30 10:42:55
【问题描述】:
考虑这一行:
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]
在这种情况下,处理错误和分配默认值的 Python 方法是什么?
【问题讨论】:
-
这不是很常见的任务,所以没有(我想)内置解决方案。但是你可以编写自己的 getter 函数并在任何你想要的地方使用它(也可以在列表推导中)。
-
exception有什么问题?这是 Pythonic。 “如果我在赋值的上下文中怎么办”显示的是打印语句,而不是赋值。您能否澄清声明以及except可能导致的问题?目前尚不清楚为什么except是不可接受的。请澄清。 -
@S.Lott - 列表理解是赋值的一个例子。想想 if-else 块和三元运算符之间的区别。
-
“列表理解是一个赋值的例子”?不是它不是。没有分配任何东西。这很令人困惑。您能否解释一下通过在
print语句周围添加标准except子句会产生什么确切 问题。 -
假设列表推导计算为
[1,2,3]。如果2无法评估,我希望我的列表为[1,'x',3](或其他),并且应该打印。根据您的建议,如果[1,2,3]失败,我唯一可以打印的是error somewhere。
标签: error-handling python