Oplossing: typefout: verwacht tekenreeks- of bytesobject
Een fout die u kunt tegenkomen bij het gebruik van Python is:
TypeError : expected string or bytes-like object
Deze fout treedt meestal op wanneer u de functie re.sub() probeert te gebruiken om bepaalde patronen in een object te vervangen, maar het object waarmee u werkt niet volledig uit strings bestaat.
Het volgende voorbeeld laat zien hoe u deze fout in de praktijk kunt corrigeren.
Hoe de fout te reproduceren
Stel dat we de volgende lijst met waarden hebben:
#define list of values
x = [1, 'A', 2, 'B', 5, 'C', 'D', 'E']
Stel nu dat we proberen elke niet-letter in de lijst te vervangen door een lege string:
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
We ontvangen een foutmelding omdat sommige waarden in de lijst geen tekenreeksen zijn.
Hoe u de fout kunt oplossen
De eenvoudigste manier om deze fout op te lossen is door de lijst naar een stringobject te converteren door deze in de operator str() te plaatsen:
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
Houd er rekening mee dat we geen foutmelding krijgen omdat we str() eerst hebben gebruikt om de lijst naar een stringobject te converteren.
Het resultaat is de originele lijst, waarbij elke niet-letter is vervangen door een spatie.
Opmerking : u kunt hier de volledige documentatie voor de functie re.sub() vinden.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in Python kunt oplossen:
Hoe KeyError in Panda’s te repareren
Oplossing: ValueError: Kan float NaN niet naar int converteren
Oplossing: ValueError: Operanden konden niet worden uitgezonden met vormen