【问题标题】:How to abort a python script when a warning is raised引发警告时如何中止python脚本
【发布时间】:2018-08-03 22:06:30
【问题描述】:

我使用了 Spyder (Python 3.6)

我的问题是我的一个循环“for”,我在某一时刻得到“RuntimeWarning:在 true_divide 中遇到除以零”

问题是(因为它在我的“tqdm”中运行得如此之快)我不知道它是在何时何地提出的。

我尝试使用:

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

或者:

try :
    blablabla 
except:
     sys.exit

但是第一个确实很慢,第二个不起作用,因为这不是错误,而只是警告。有什么方法可以在发出警告时停止脚本,以便我自己调查?

提前致谢。

【问题讨论】:

    标签: python numpy warnings abort


    【解决方案1】:

    你需要改变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!
    

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 2016-12-21
      • 2015-05-21
      • 2010-12-20
      • 1970-01-01
      相关资源
      最近更新 更多