使用numpy.bytes_对象进行字符串格式化时超出最大递归深度
这段代码应该能自我说明:
$ 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'
在使用 np.bytes_(b'Hello')
时,str
和 repr
都会返回 "b'Hello'"
,而且我可以正常使用 print(np.bytes_(b'Hello'))
来打印出来,但在格式化字符串中却出现了递归循环的问题。
我是不是太傻了,还是说这确实是 numpy
的一个问题?即使真的是这样,我也不太明白到底发生了什么。有人能帮我解释一下吗?
我在 Python 2 中没有复现这个问题。
1 个回答
2
{}
的行为是调用np.bytes_(b'Hello').__format__()
。看起来这里有个bug,导致__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'"