如何在出现警告时中止 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!
我用的是 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!