如何在 Python 中划分 2 个列表时处理列表理解中被零除的异常
How to handle the divide by zero exception in List Comprehensions while dividing 2 lists in Python
在 Python 中划分 2 个列表时如何处理列表理解中被零除的异常:
来自以下示例:
from operator import truediv
result_list = map(truediv, [i for i in list1], [j for j in list2])
其中 list2 可以包含 0 作为值。
由于我的代码限制,我想在同一行处理异常。请帮助我。
您可以像这样轻松过滤掉 0 个值,
from operator import truediv
result_list = map(truediv, [i for i in list1], [j for j in list2 if j])
你不能。 try
是一个 (compound) statement, a list-comprehension is an expression。在 Python 中,这些是完全不同的东西,你 不能 在表达式中包含语句。
你可以做的是使用包装函数:
def add_handler(handler, exc, func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except exc:
return handler(*args, **kwargs) # ???
return wrapper
然后用作:
my_truediv = add_handler(print, ZeroDivisionError, truediv)
请注意,这非常有限。您必须 return 一个值并将其插入到结果列表中,不能简单地 "skip it".
你应该简单地做:
from operator import truediv
result_list = []
for i, j in zip(list1, list2):
try:
result_list.append(i/j)
except ZeroDivisionError:
pass
或者,如果您只是想跳过这些值,您可以将它们过滤掉:
map(lambda x_y: truediv(*x_y), filter(lambda x_y: x_y[1] != 0, zip(list1, list2)))
如果您想将除以零记录为 NaN
那么您可以使用您自己的自定义除法函数,如下所示:
import numpy as np
def divide(a, b):
if b == 0:
return np.nan
else:
return a/b
list1 = [1, 2, 3]
list2 = [1, 0, 2]
result_list = map(divide, [i for i in list1], [j for j in list2])
在 Python 中划分 2 个列表时如何处理列表理解中被零除的异常:
来自以下示例:
from operator import truediv
result_list = map(truediv, [i for i in list1], [j for j in list2])
其中 list2 可以包含 0 作为值。
由于我的代码限制,我想在同一行处理异常。请帮助我。
您可以像这样轻松过滤掉 0 个值,
from operator import truediv
result_list = map(truediv, [i for i in list1], [j for j in list2 if j])
你不能。 try
是一个 (compound) statement, a list-comprehension is an expression。在 Python 中,这些是完全不同的东西,你 不能 在表达式中包含语句。
你可以做的是使用包装函数:
def add_handler(handler, exc, func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except exc:
return handler(*args, **kwargs) # ???
return wrapper
然后用作:
my_truediv = add_handler(print, ZeroDivisionError, truediv)
请注意,这非常有限。您必须 return 一个值并将其插入到结果列表中,不能简单地 "skip it".
你应该简单地做:
from operator import truediv
result_list = []
for i, j in zip(list1, list2):
try:
result_list.append(i/j)
except ZeroDivisionError:
pass
或者,如果您只是想跳过这些值,您可以将它们过滤掉:
map(lambda x_y: truediv(*x_y), filter(lambda x_y: x_y[1] != 0, zip(list1, list2)))
如果您想将除以零记录为 NaN
那么您可以使用您自己的自定义除法函数,如下所示:
import numpy as np
def divide(a, b):
if b == 0:
return np.nan
else:
return a/b
list1 = [1, 2, 3]
list2 = [1, 0, 2]
result_list = map(divide, [i for i in list1], [j for j in list2])