use*_*602 6 python django list divide-by-zero
如何在Python中分割2个列表时处理List Comprehensions中的除零异常:
从下面的例子:
from operator import truediv
result_list = map(truediv, [i for i in list1], [j for j in list2])
Run Code Online (Sandbox Code Playgroud)
其中list2可以包含0作为值.
由于我的代码约束,我想在同一行中处理异常.请帮我.
你不能。try是一个(复合)语句,列表推导式是一个表达式。在 Python 中,这些是完全不同的东西,并且表达式中不能有语句。
您可以做的就是使用包装函数:
def add_handler(handler, exc, func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except exc:
return handler(*args, **kwargs) # ???
return wrapper
Run Code Online (Sandbox Code Playgroud)
然后用作:
my_truediv = add_handler(print, ZeroDivisionError, truediv)
Run Code Online (Sandbox Code Playgroud)
请注意,这是非常有限的。您必须返回一个值并将其插入结果列表中,不能简单地“跳过它”。
你应该简单地做:
from operator import truediv
result_list = []
for i, j in zip(list1, list2):
try:
result_list.append(i/j)
except ZeroDivisionError:
pass
Run Code Online (Sandbox Code Playgroud)
或者,如果您只是想跳过这些值,您可以将它们过滤掉:
map(lambda x_y: truediv(*x_y), filter(lambda x_y: x_y[1] != 0, zip(list1, list2)))
Run Code Online (Sandbox Code Playgroud)