首页 > 解决方案 > 有异常的三元运算符?

问题描述

我经常发现自己在编写代码,例如:

try:
    name = names[2]
except IndexError:
    name = names[1]

或许:

try:
    name = Names.first
except AttributeError:
    name = Names.default

由于三元运算符有很好的语法,我想知道异常是否有类似的东西?就像是:

name = names[2] except IndexError names[1]

name = Names.first except AttributeError Names.default

符合以下三元运算符风格:

name = names[2] if names[2] else names[1]

标签: pythonexceptionconditional-operator

解决方案


没有处理异常的表达式(尽管有一个被拒绝的 PEP试图引入一个)。但是,您可以首先避免异常。

name = names[2:0:-1][0]  # At the cost of making a small temporary list object

假设names至少有 2 个值,切片会生成一个列表,其第一个元素是names[2]或,具体取决于实际有names[1]多少元素。names使用 检索切片的第一个元素[0]

也没有等价物dict.get可以让您编写类似的东西names.get(2, names[1]),尽管这表明您的列表可能应该是 adict或具有更多语义结构的东西。


推荐阅读