代码之家  ›  专栏  ›  技术社区  ›  ISemsem

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

  •  1
  • ISemsem  · 技术社区  · 7 年前

    我使用了Spyder(Python 3.6)

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

    问题是(因为我的“TQM”进行得太快了),我不知道它在哪里或何时提出。

    我尝试使用:

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

    或:

    try :
        blablabla 
    except:
         sys.exit
    

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

    提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   juanpa.arrivillaga    7 年前

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