3

コードはそれ自体で語る必要があります。

$ python
Python 3.3.0 (default, Dec 22 2012, 21:02:07) 
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> '{}'.format(np.bytes_(b'Hello'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: maximum recursion depth exceeded while calling a Python object
>>> np.version.version
'1.7.0'

との両方がonstrrepr戻ります。うまくいきますが、フォーマット文字列では再帰ループに陥ります。"b'Hello'"np.bytes_(b'Hello')print(np.bytes_(b'Hello'))

私は愚かでしょうか、それとも実際にそのように見えるもの、つまり の問題なのnumpyですか? あったとしても、何が起こっているのかよくわかりません。誰か説明してくれませんか?

Python 2 では再現していません。

4

1 に答える 1

2

の動作{}はを呼び出すことnp.bytes_(b'Hello').__format__()です。__format__自分自身を呼び出しているところにバグがあるようです。この関連チケットを見る

回避策は次のとおりです。

Python 3.2.3 (default, Oct 19 2012, 19:53:57) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> '{}'.format(np.bytes_(b'Hello'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: maximum recursion depth exceeded while calling a Python object
>>> '{!s}'.format(np.bytes_(b'Hello'))
"b'Hello'"
>>> '{!r}'.format(np.bytes_(b'Hello'))
"b'Hello'"
于 2013-03-17T22:19:55.563 に答える