Странное поведение Python в NumPy делить на ноль

python version: 2.7.15
numpy version:  1.14.5

Выполнение заявления

print 0/0

в моем коде выдает ошибку

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "__divide_err__.py", line 5, in <module>
    print 0/0
ZeroDivisionError: integer division or modulo by zero

и немедленно останавливает выполнение дальнейших строк, сообщая мне, где именно была ошибка. Тем не менее, я использую NumPy, в этом случае я наблюдал следующее поведение:

import numpy as np
dir_vect  = np.zeros(3).astype('float64')
print dir_vect/dir_vect    # I did something like this in my code to normalize vectors to magnitude "1"
print "this line would not execute if divide by zero behavior was consistent between pure python and numpy"

вывод на консоль, которую я получил:

__divide_err__.py:8: RuntimeWarning: invalid value encountered in divide
  print dir_vect/dir_vect
[nan nan nan]
this line would not execute if divide-by-zero behavior was consistent between pure python and numpy

Оператор print в следующей строке был выполнен!

В моем игрушечном примере проблема не серьезна, но в моем реальном коде у меня есть более 2000 строк Python для проверки, и источник [nan nan nan] было не совсем понятно. Я вообще нахожу NumPy чрезвычайно интуитивным и элегантным, особенно вещание. Но эта ошибка отодвинула меня назад на несколько часов, и я был бы признателен за объяснение выбора, чтобы предупредить, а не бросить ZeroDivisionError, Я был бы признателен, если бы кто-то работал над созданием NumPy, чтобы изменить ZeroDivisionError вместо того, чтобы просто предупредить меня (предупреждение, вероятно, потерялось в моём наборе операторов печати, которые я использовал для отладки)

Спасибо

0 ответов

Другие вопросы по тегам