Jak naprawić: błąd typu: oczekiwany obiekt typu string lub bytes
Błąd, który możesz napotkać podczas korzystania z Pythona, to:
TypeError : expected string or bytes-like object
Ten błąd zwykle pojawia się, gdy próbujesz użyć funkcji re.sub() do zastąpienia niektórych wzorców w obiekcie, ale obiekt, z którym pracujesz, nie jest w całości ciągiem znaków.
Poniższy przykład pokazuje, jak w praktyce skorygować ten błąd.
Jak odtworzyć błąd
Załóżmy, że mamy następującą listę wartości:
#define list of values
x = [1, 'A', 2, 'B', 5, 'C', 'D', 'E']
Załóżmy teraz, że próbujemy zastąpić każdą nieliterę na liście pustym ciągiem znaków:
import re
#attempt to replace each non-letter with empty string
x = re. sub (' [^a-zA-Z] ', '', x)
TypeError : expected string or bytes-like object
Otrzymujemy błąd, ponieważ niektóre wartości na liście nie są ciągami znaków.
Jak naprawić błąd
Najłatwiejszym sposobem naprawienia tego błędu jest przekonwertowanie listy na obiekt typu string poprzez zawinięcie go w operator str() :
import re
#replace each non-letter with empty string
x = re. sub (' [^a-zA-Z] ', '', str (x))
#display results
print (x)
A B C D E
Zauważ, że nie otrzymujemy błędu, ponieważ najpierw użyliśmy str() do przekonwertowania listy na obiekt typu string.
Rezultatem jest oryginalna lista, w której każda inna litera jest zastąpiona spacją.
Uwaga : pełną dokumentację funkcji re.sub() można znaleźć tutaj .
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w Pythonie:
Jak naprawić błąd KeyError w Pandach
Jak naprawić: ValueError: Nie można przekonwertować float NaN na int
Jak naprawić: Błąd wartości: Nie można rozgłaszać argumentów z kształtami