需要帮助理解 Python 3.5 中的类字节对象与 str
Need help understanding bytes-like object vs str in Python 3.5
我在使用 Python 3.5 或 3.4 使库在 Windows 上工作时遇到问题(请参阅此问题 [1])。我想我会仔细看看它失败的原因。
我相信问题归结为一些看起来像这样的代码,我不明白其结果:
import urllib.request
import sys
a = 'c:\Python35\Lib\site-packages\weasyprint\css\html5_ua.css'
b = a.encode(sys.getfilesystemencoding()) ## 'mbcs' on windows
c = urllib.request.pathname2url(b)
运行 解释器中的这个给出:
TypeError: 需要一个类似字节的对象,而不是 'str'
但是,将最后一行更改为:
c = urllib.request.pathname2url(a)
而且效果很好。类型(a)是 < class 'str' >
我很困惑,因为它告诉我它需要一个类似字节的对象,但只有当我向它传递一个 < class 'str' > 对象时它才有效。希望这很容易解释,我只是想念它。
使用命令行解释器的堆栈跟踪:
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib.request
>>> import sys
>>> a = 'c:\Python35\Lib\site-packages\weasyprint\css\html5_ua.css'
>>> b = a.encode(sys.getfilesystemencoding()) ## 'mbcs' on windows
>>> c = urllib.request.pathname2url(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python35\lib\nturl2path.py", line 48, in pathname2url
if not ':' in p:
TypeError: a bytes-like object is required, not 'str'
>>>
[1] WeasyPrint usage with Python 3.x on Windows
urllib.request.pathname2url
采用字符串,而不是类似字节的对象。您收到的错误消息来自 bytes
对象,当 urllib
尝试像字符串一样使用它并且 bytes
对象想要传递其他类似字节的对象时。
我在使用 Python 3.5 或 3.4 使库在 Windows 上工作时遇到问题(请参阅此问题 [1])。我想我会仔细看看它失败的原因。
我相信问题归结为一些看起来像这样的代码,我不明白其结果:
import urllib.request
import sys
a = 'c:\Python35\Lib\site-packages\weasyprint\css\html5_ua.css'
b = a.encode(sys.getfilesystemencoding()) ## 'mbcs' on windows
c = urllib.request.pathname2url(b)
运行 解释器中的这个给出:
TypeError: 需要一个类似字节的对象,而不是 'str'
但是,将最后一行更改为:
c = urllib.request.pathname2url(a)
而且效果很好。类型(a)是 < class 'str' >
我很困惑,因为它告诉我它需要一个类似字节的对象,但只有当我向它传递一个 < class 'str' > 对象时它才有效。希望这很容易解释,我只是想念它。
使用命令行解释器的堆栈跟踪:
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib.request
>>> import sys
>>> a = 'c:\Python35\Lib\site-packages\weasyprint\css\html5_ua.css'
>>> b = a.encode(sys.getfilesystemencoding()) ## 'mbcs' on windows
>>> c = urllib.request.pathname2url(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python35\lib\nturl2path.py", line 48, in pathname2url
if not ':' in p:
TypeError: a bytes-like object is required, not 'str'
>>>
[1] WeasyPrint usage with Python 3.x on Windows
urllib.request.pathname2url
采用字符串,而不是类似字节的对象。您收到的错误消息来自 bytes
对象,当 urllib
尝试像字符串一样使用它并且 bytes
对象想要传递其他类似字节的对象时。