修復 Python 中的類位元組物件不是 STR 錯誤

Manav Narula 2022年5月17日
修復 Python 中的類位元組物件不是 STR 錯誤

本教程將討論 Python 中的錯誤 a bytes-like object is required, not 'str' 以及修復它的方法。當對錯誤的資料型別執行無效操作時,此 TypeError 會顯示。

我們將討論 Python 中的字串和位元組物件。字串是字元的集合,而後者是位元組序列,也稱為 Unicode 物件。在 Python3 中,所有字串預設都是 Unicode 物件。在 Python 2 中,我們可以使用 encodedecode 函式將字串轉換為 Unicode,反之亦然。

當使用位元組物件但將其視為字串時,我們會收到此錯誤。由於 Python 2 和 Python 3 中這些物件的更改,這很常見。我們在使用二進位制檔案並將其視為字串時遇到此錯誤。

例如:

with open('myfile.txt','rb') as f:
    a = f.read()
    print(type(a))
    a.split(';')

輸出:

TypeError: a bytes-like object is required, not 'str'

在上面的示例中,我們以 rb 模式讀取檔案。此模式意味著讀取二進位制檔案。它的內容是位元組並儲存在變數 a 中,我們顯示型別。

當我們對這個變數應用 split() 函式時,我們得到 a bytes-like object is required, not 'str'錯誤。這是因為 split() 函式適用於字串物件。

為避免此錯誤,請注意資料讀取型別及其操作。我們還可以通過使用 str() 函式將類似位元組的物件轉換為字串來修復此錯誤。

例如:

with open('myfile.txt','rb') as f:
    a = str(f.read())
    print(type(a))
    s = a.split(';')

輸出:

<class 'str'>

str() 將物件轉換為字串以使用 split() 函式。

在使用套接字以及傳送或接收資料時,此錯誤也很常見。我們可以在字串前使用 b 字元來傳送位元組,或者使用帶有 utf-8 引數的 encode() 函式。

例如:

data = b'result'
s.sendall(data)
Author: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相關文章 - Python String

相關文章 - Python Error