[英]Why I get Type Error: descriptor 'encode' for 'str' objects doesn't apply to a 'bytes' object
[英]Why is type(bytes()) <'str'>
我對python很新,我很欣賞它是一種動態語言。 在我的第一個python代碼大約30分鍾后,我發現bytes
類型的行為有點奇怪(至少可以說):
a = bytes()
print type(a)
// prints: <type 'str'>
在這里試試: http : //ideone.com/NqbcHk
現在, 文檔說strings
和bytes
表現非常相似,但.format
和.encode
除外,但我沒想到它們是同一類型。 我想要確保的是我在代碼中使用實際字節,並且不會發生強制/編碼/解碼。
那么這里發生了什么?
bytes
類型是Python 3.x中的新增類型。 在Python 2.x中,作為兼容性填充程序, bytes
是str
的簡單別名。
在這里閱讀更多相關信息: https : //docs.python.org/2/whatsnew/2.6.html#pep-3112-byte-literals
Python 3.0采用Unicode作為語言的基本字符串類型,並以不同的方式表示8位字面值,可以是
b'string'
或使用字節構造函數。 為了將來的兼容性,Python 2.6添加了字節作為str類型的同義詞,它還支持b''
表示法。2.6 str以各種方式與3.0的字節類型不同; 最值得注意的是,構造函數完全不同。 在3.0中,
bytes([65, 66, 67])
是3個元素長,包含表示ABC的字節; 在2.6中,bytes([65, 66, 67])
返回表示列表的str()
的12字節字符串。2.6中字節的主要用途是編寫對象類型的測試,例如
isinstance(x, bytes)
。 這將有助於2to3轉換器,它無法判斷2.x代碼是否意圖字符串包含字符或8位字節; 你現在可以使用bytes或str來准確地表示你的意圖,結果代碼在Python 3.0中也是正確的。
您正在查看Python 3文檔。 在Python 2中, bytes
是str
的別名,添加它是為了更容易編寫向前兼容的代碼(Python 2的str
是一個字節字符串,而Python 3 str
是Python 2中的unicode
)。
有關更多詳細信息,請參閱Python 3.0中的新增功能 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.