string.maketrans unicode 处理:pypy 与 CPython
string.maketrans unicode handling: pypy vs CPython
当参数是 unicode 时,Pypy 似乎无法处理 string.maketrans(),但 CPython 可以:
$ python
Python 2.7.5 (default, Oct 11 2013, 14:51:32)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import string
>>> string.maketrans(ur"-/[] ", ur"_____")
'\x00\x01\x02\x03\x04\x05\x06...'
$ pypy
Python 2.7.13 (c925e73810367cd960a32592dd7f728f436c125c, Jun 08 2017, 19:14:08)
[PyPy 5.8.0 with GCC 6.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>> import string
>>>> string.maketrans(ur"-/[] ", ur"_____")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../pypy-5.8-linux_x86_64-portable/lib-python/2.7/string.py", line 78, in maketrans
buf[ord(fromstr[i])] = tostr[i]
TypeError: 'unicode' object cannot be interpreted as an index
未在 http://pypy.readthedocs.io/en/latest/cpython_differences.html 上找到任何相关内容。
这是 CPython 或 PyPy 的错误吗?
那是 "bug",即意想不到的差异。已在 7fe0041fccaa 中修复(参见 https://bitbucket.org/pypy/pypy/raw/default/lib-python/2.7/string.py 的第 78 行)。
当参数是 unicode 时,Pypy 似乎无法处理 string.maketrans(),但 CPython 可以:
$ python
Python 2.7.5 (default, Oct 11 2013, 14:51:32)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import string
>>> string.maketrans(ur"-/[] ", ur"_____")
'\x00\x01\x02\x03\x04\x05\x06...'
$ pypy
Python 2.7.13 (c925e73810367cd960a32592dd7f728f436c125c, Jun 08 2017, 19:14:08)
[PyPy 5.8.0 with GCC 6.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>> import string
>>>> string.maketrans(ur"-/[] ", ur"_____")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../pypy-5.8-linux_x86_64-portable/lib-python/2.7/string.py", line 78, in maketrans
buf[ord(fromstr[i])] = tostr[i]
TypeError: 'unicode' object cannot be interpreted as an index
未在 http://pypy.readthedocs.io/en/latest/cpython_differences.html 上找到任何相关内容。
这是 CPython 或 PyPy 的错误吗?
那是 "bug",即意想不到的差异。已在 7fe0041fccaa 中修复(参见 https://bitbucket.org/pypy/pypy/raw/default/lib-python/2.7/string.py 的第 78 行)。