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