我有一个函数接受一个大的数字列表,然后用一个等式计算每个值的东西。但是,当我运行代码时,我得到以下内容:
RuntimeWarning: divide by zero encountered in double_scalars
我想要一种方法只打印导致错误的项目。我怎么能这样做?
def foo(list):
result = None
for x in list:
result = 1/x #makes the warning
return result
当然x
将为零,但我想在列表中找到导致此错误的x
索引。
修改:
是否可以使用try
来做到这一点?还是应该只使用if
?
答案 0 :(得分:0)
您可以修改代码,如下所示:
def foo(list):
result = None
for x in list:
if x==0:
print "0 found at ", list.index(x)
else:
result = 1/x #makes the warning
return result
如果我们发现x为0,那么我们打印索引,否则我们继续划分
答案 1 :(得分:0)
在Python中有一句话:It's easier to ask forgiveness than it is to get permission
这意味着应该使用try/except
块而不是测试当前整数的值。
另外,要在迭代期间获取数组中任何元素的索引而不必使用index
方法,您可以查看enumerate。
# note that naming your variable 'list' could be dangerous and/or misleading
def foo(integers):
result = 0
for (index, current_int) in enumerate(integers):
try:
result = 1 / current_int
except ZeroDivisionError:
print "Division by zero at index", index
return result
print foo([1, 23, 0, 7])
# output is
# Division by zero at index 2
# 0