Fix Bytes-Like Object Is Required Not STR Error in Python

Manav Narula 12 April 2022
Fix Bytes-Like Object Is Required Not STR Error in Python

In diesem Tutorial wird der Fehler a bytes-like object is required, not 'str' in Python und Möglichkeiten zur Behebung erläutert. Dieser TypeError zeigt an, wenn eine ungültige Operation mit dem falschen Datentyp ausgeführt wird.

Wir werden String- und Bytes-Objekte in Python besprechen. Strings sind eine Ansammlung von Zeichen, letztere eine Folge von Bytes, auch Unicode-Objekte genannt. In Python3 sind alle Strings standardmäßig Unicode-Objekte. In Python 2 können wir mit den Funktionen encode und decode Strings in Unicode und umgekehrt umwandeln.

Wir erhalten diesen Fehler, wenn wir mit einem Bytes-Objekt arbeiten, es aber als Zeichenfolge behandeln. Dies ist häufig auf die Änderung dieser Objekte in Python 2 und Python 3 zurückzuführen. Wir erhalten diesen Fehler beim Arbeiten mit einer Binärdatei und behandeln ihn als Zeichenfolge.

Beispielsweise:

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

Ausgabe:

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

Im obigen Beispiel lesen wir eine Datei im rb-Modus. Dieser Modus bedeutet das Lesen einer Binärdatei. Der Inhalt davon sind Bytes und in der Variablen a gespeichert, und wir zeigen den Typ an.

Wenn wir die Funktion split() auf diese Variable anwenden, erhalten wir den Fehler ein Byte-ähnliches Objekt ist erforderlich, nicht 'str'. Das liegt daran, dass die Funktion split() mit String-Objekten arbeitet.

Um diesen Fehler zu vermeiden, achten Sie auf den Datenlesetyp und seine Operationen. Wir können diesen Fehler auch beheben, indem wir das Byte-ähnliche Objekt mit der Funktion str() in einen String konvertieren.

Beispielsweise:

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

Ausgabe:

<class 'str'>

Das str() wandelt das Objekt in einen String um, um die Funktion split() zu verwenden.

Dieser Fehler tritt auch häufig auf, wenn mit Sockets gearbeitet und Daten gesendet oder empfangen werden. Wir können das Zeichen b vor einem String verwenden, um Bytes zu senden, oder die Funktion encode() mit dem Parameter utf-8.

Beispielsweise:

data = b"result"
s.sendall(data)
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

Verwandter Artikel - Python String

Verwandter Artikel - Python Error