我有一些Python中的列表理解,其中每个迭代都可以抛出异常。如何处理Python中的列表理解中的异常?
例如,如果我有:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
我会在第三元素的ZeroDivisionError
例外。
如何处理此异常并继续执行列表理解?
我能想到的唯一方法是使用一个辅助功能:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
但是,这看起来有点麻烦给我。
有没有更好的方法在Python中做到这一点?
注:这是一个简单的例子(见“例如”以上),我做作,因为我的真实的例子,需要一些背景。我对避免被零错误除法,但是在处理列表理解中的异常方面并不感兴趣。
有一个[PEP 463](https://www.python.org/dev/peps/pep-0463/)添加表达式来处理异常。在你的例子中,它将是'[1 /蛋,除了ZeroDivisionError:无((1,3,0,3,2)]中的蛋。但它仍处于草稿模式。我的直觉是它不会被接受。 Imho表达式可能太乱了(检查多个异常,具有更复杂的组合(多逻辑运算符,复杂的理解等) – cfi 2016-06-06 07:44:21
请注意,对于这个特定的*示例,您可以在np中使用具有适当设置的numpy'ndarray'。这会导致'1/0 = nan',但是我意识到这并不能推广到其他需要这种情况的场合 – gerrit 2016-07-25 19:00:23