我在Python中有一些列表理解,其中每次迭代都可能引发异常。
例如,如果我有:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
我将在第3个元素中得到一个
ZeroDivisionError
异常。如何处理此异常并继续执行列表理解?
我能想到的唯一方法是使用辅助函数:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
但这对我来说有点麻烦。
有没有更好的方法在Python中执行此操作?
注意:这是我做的一个简单示例(请参见上面的“例如”),因为我的实际示例需要一些上下文。我对避免除以零错误不感兴趣,但对处理列表理解中的异常不感兴趣。
最佳答案
Python中没有内置的表达式可以让您忽略异常(或在发生异常的情况下返回替代值&c),因此从字面上来讲,“处理列表推导中的异常”是不可能的,因为列表推导是一个表达式包含其他表达式,仅此而已(即而不是语句,并且只有语句可以捕获/忽略/处理异常)。
函数调用是表达式,函数主体可以包含所需的所有语句,因此,如您所注意到的,将易于发生异常的子表达式的评估委托(delegate)给函数是一种可行的解决方法(其他可行的话,可以检查可能引发异常的值,如其他答案中所建议)。
对“如何处理列表理解中的异常”这一问题的正确回答都表达了所有这些事实的一部分:1)从字面上,即从词法上讲,理解本身不能; 2)实际上,在可行的情况下,您将作业委托(delegate)给一个函数或检查容易出错的值。您一再声称这不是一个答案是没有根据的。
关于python - 如何处理列表推导中的异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1528237/