查找导致RuntimeWarning的值

时间:2014-03-21 18:23:45

标签: python

我有一个函数接受一个大的数字列表,然后用一个等式计算每个值的东西。但是,当我运行代码时,我得到以下内容:

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

2 个答案:

答案 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