Pythons memoryview. not support datetime64
or timedelta
. ОК. Но когда я пытаюсь создать memoryview
структурированного массива, который содержит datetime64
или timedelta
, он работает ... , если я не назначил его переменной!Почему создание этого memoryview повышает значение ValueError только при назначении переменной?
In [19]: memoryview(zeros(10, dtype=[("A", "m8[s]")]))
Out[19]: <memory at 0x7f1d455d6048>
In [20]: x = memoryview(zeros(10, dtype=[("A", "m8[s]")]))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
ValueError: cannot include dtype 'm' in a buffer
In [21]: x = _19
In [22]: x
Out[22]: <memory at 0x7f1d455d6048>
Это серьезно бросает вызов моему пониманию того, как работает Python. Как могут быть f()
и x = f()
, учитывая, что (1) IPythons REPL назначает вывод _19
в любом случае, и (2) функция/класс memoryview
не имеет способа узнать, что вызывающий абонент собирается делать с его выходом?
Я запускаю код на Python 3.4.1, numpy 1.10.0.dev + fbcc24f, на Linux 2.6.32-431.23.3.el6.x86_64, Scientific Linux release 6.6.
EDIT
В Python 3.5, NumPy 1.10.4, я получаю:
In [50]: memoryview(numpy.zeros(10, dtype=[("A", "m8[s]")]))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
ValueError: cannot include dtype 'm' in a buffer
During handling of the above exception, another exception occurred:
SystemError Traceback (most recent call last)
<ipython-input-50-5d5ac6c085fa> in <module>()
----> 1 memoryview(numpy.zeros(10, dtype=[("A", "m8[s]")]))
SystemError: <class 'memoryview'> returned a result with an error set
Я подал bug with numpy, хотя я не совсем уверен, что это где проблема вранье.
Несмотря на ValueError, присваивание в '[20]' преуспело. Взгляните на переменную 'x' сразу после назначения. Вы увидите, что на самом деле ему присвоено значение. (Извините, я не знаю, что вызывает ValueError.) –
@WarrenWeckesser. Да, действительно. Мне не приходилось проверять. – gerrit
Это похоже на ошибку в модуле «theading» python (попробуйте запустить вышеуказанный код в скрипте без ipython), я никогда раньше не видел ничего подобного. –