我在Python中有一些列表理解,其中每次迭代都可能引发异常。
例如,如果我有:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
我将ZeroDivisionError
在第3个元素中得到一个例外。
如何处理此异常并继续执行列表理解?
我能想到的唯一方法是使用辅助函数:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
但这对我来说有点麻烦。
有没有更好的方法在Python中执行此操作?
注意: 这是我做的一个简单示例(请参阅上面的“ 例如 ”),因为我的实际示例需要一些上下文。我对避免除以零错误不感兴趣,但对处理列表理解中的异常不感兴趣。
ndarray
具有适当设置的numpy np.seterr
。这将导致1/0 = nan
。但是我意识到这并不能推广到其他需要这种情况的情况。
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
。但是它仍然处于草稿模式。我的直觉是它不会被接受。Imho表达式可能变得过于混乱(检查多个异常,具有更复杂的组合(多个逻辑运算符,复杂的理解等))