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

How to abort a python script when a warning is raised

我用的是 Spyder (Python 3.6)

我的问题出在我的一个循环 "for" 上,我在某一时刻收到“RuntimeWarning: divide by zero encountered in true_divide”

问题是(因为我的 "tqdm" 速度太快了)我不知道它是在何时何地引发的。

我尝试使用:

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

或:

try :
    blablabla 
except:
     sys.exit

但第一个真的很慢,第二个不起作用,因为这不是错误,只是警告。有没有办法在出现警告时停止脚本,以便我自己调查?

提前致谢。

您需要更改 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'}

现在报错了,可以用error-handling:

>>> 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!