在Python中处理超出范围的默认值
a = ['123', '2', 4]
b = a[4] or 'sss'
print b
我想在列表索引超出范围时获取一个默认值(这里是:'sss'
)。
我该怎么做呢?
13 个回答
65
在Python的精神中,优雅的代码比丑陋的代码更好。
这里介绍一种代码高尔夫的方法,使用切片和解包(不确定四年前这是否有效,但在Python 2.7和3.3中是可以的)。
b, = a[4:5] or ['sss']
我觉得这种方法比用包装函数或尝试-捕获(try-catch)要好看,但对初学者来说可能有点吓人。
使用切片而不解包的方法:
b = a[4] if a[4:] else 'sss'
或者,如果你经常需要这样做,并且不介意创建一个字典的话:
d = dict(enumerate(a))
b = d.get(4, 'sss')
116
在不太符合Python风格的“先问问能不能,别等出错再说”的情况下,这里有另一种方法:
b = a[4] if len(a) > 4 else 'sss'
128
在Python的精神中,有一句话是“先做再说,不要总问能不能”,下面就是一种实现方式:
try:
b = a[4]
except IndexError:
b = 'sss'