如何在发出警告时中止python脚本

时间:2018-02-23 19:20:16

标签: python numpy warnings abort

我使用了Spyder(Python 3.6)

我的问题在于我的一个循环"对于",我得到了一个时刻" RuntimeWarning:在true_divide"

中遇到的除以零

问题是(因为它与我的" tqdm&#34相比如此之快;)我无法知道它在何时何地被提出。

我试图使用:

print("ii = " + str(ii) + ", jj = " + str(jj) + ... + ", zz = " + str(zz))

或者:

try :
    blablabla 
except:
     sys.exit

但是第一次和第二次的效果都很慢,因为它不是错误而只是警告。提出警告时有没有办法停止脚本,所以我可以自己调查?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您需要更改numpy处理错误的方式:

>>> arr1 = numpy.random.randint(0, 123, (10,))
>>> arr2 = numpy.random.randint(0,5, (10,))
>>> arr1, arr2
(array([  0,   7,  15,  89, 110,  82,  53,  73,  64,  55]), array([2, 1, 3, 0, 2, 0, 2, 0, 0, 0]))
>>> arr1/arr2
__main__:1: RuntimeWarning: divide by zero encountered in true_divide
array([  0. ,   7. ,   5. ,   inf,  55. ,   inf,  26.5,   inf,   inf,   inf])

使用seterr

>>> numpy.seterr(divide='raise') # returns old settings
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}

现在,引发了错误,您可以使用错误处理:

>>> arr1/arr2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FloatingPointError: divide by zero encountered in true_divide

类似于:

>>> try:
...     arr1/arr2
... except FloatingPointError as e:
...     print("can't divide by zero!")
...
can't divide by zero!