我经常遇到一个问题,我需要将函数应用于大型数据迭代器,但该函数有时会引发一个我想忽略的已知错误。不幸的是,列表压缩和map函数都没有很好的方法来处理错误。
在python中快速跳过/处理错误的最佳方法是什么?
例如,假设我有一个数据列表和一个函数,只要数据是str,该函数就会引发ValueError
。我希望它跳过这些值。一种方法是:
result = []
for n in data:
try: result.append(function(n))
except ValueError: pass
你也可以做同样的事情而不进行错误检查:
result = [function(n) for n in data]
或
result = list(map(function, data))
我想要一种c-compiled方法来完成上述操作。
的精神result = list(map(function, data, skip_errors=True))
default=value
的功能也很有用,因此引发的错误会创建默认值。
我认为这可能是我需要编写Cython扩展名。
注意:我可以编写一个解决方案来编写我在this answer中用c或cython编写的catch
函数。然后我可以在列表压缩中使用它并获得我想要的性能提升。
答案 0 :(得分:0)
为什么不将函数包装在错误处理程序中?
def spam(n):
try:
return function(n)
except ValueError:
pass
result = [spam(n) for n in data]
然后,您可以在错误处理中添加任何内容(请注意,在此版本中它返回None
,因此您可能希望过滤结果列表或返回默认值)。使用map
也是如此。