Beheben Sie den TypeError: Not All Arguments Converted While String Formatting in Python
-
Ursachen und Lösungen für
TypeError: Not All Arguments Converted While String Formatting
in Python - Abschluss
Die Formatierung von Zeichenfolgen in Python kann auf verschiedene Arten erfolgen, und ein Modulo-Operator (%
) ist eine solche Methode. Es ist eine der ältesten Methoden der String-Formatierung in Python, und eine falsche Verwendung kann dazu führen, dass der TypeError: not all arguments converted during string formatting
auftritt.
Nicht nur das, viele andere Gründe können dasselbe verursachen. Lassen Sie uns mehr über diesen Fehler und die möglichen Lösungen zu seiner Behebung erfahren.
TypeError
ist eine Python-Ausnahme, die ausgelöst wird, wenn wir versuchen, mit nicht unterstützten Objekttypen zu arbeiten. Es gibt viele Szenarien, in denen wir diesen Fehler erhalten können, aber in diesem Artikel werden wir uns den Python-TypeError
ansehen, der durch die falsche Formatierung von Zeichenfolgen auftritt.
Fangen wir ohne weiteres an!
Ursachen und Lösungen für TypeError: Not All Arguments Converted While String Formatting
in Python
Es gibt viele Gründe, warum in Python der TypeError: not all arguments converted during string formatting
auftreten kann. Lassen Sie uns sie einzeln besprechen, zusammen mit den möglichen Lösungen.
Operationen mit dem falschen Datentyp in Python
Sehen Sie sich das unten angegebene Beispiel an. Hier nehmen wir das Alter des Benutzers als Eingabe und verwenden dann den Modulo-Operator (%
).
Das Ergebnis wird in der Variable ans
gespeichert, die dann in der print
-Anweisung zum String formatiert wird. Aber wenn wir diesen Code ausführen, erhalten wir den TypeError
.
Dies geschieht, weil Python Eingaben in Form einer Zeichenfolge entgegennimmt. Das bedeutet, dass der als Eingabe genommene Wert 19
von Python als Datentyp str
betrachtet wird.
Aber können wir einen Modulo-Operator (%
) auf einen String anwenden? Nein, und daher erhalten wir diesen Fehler.
age = input("Enter your age: ")
ans = age % 10
print("Your lucky number is:", ans)
Ausgang:
Enter your age: 19
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: not all arguments converted during string formatting
Um dies zu beheben, müssen wir die Eingabe als Ganzzahl mit der Funktion int()
nehmen. Dies geschieht unten.
age = int(input("Enter your age: "))
ans = age % 10
print("Your lucky number is:", ans)
Ausgang:
Enter your age: 19
Your lucky number is: 9
Sie können sehen, dass wir dieses Mal die gewünschte Ausgabe erhalten, da die Funktion int()
die Eingabe in den ganzzahligen Datentyp konvertiert und wir den Modulo-Operator (%
) darauf anwenden können.
Fehlen des Formatbezeichners mit dem String-Interpolationsoperator in Python
Dieser Fall ist dem oben besprochenen ein wenig ähnlich. Sehen Sie sich das unten angegebene Beispiel an.
Die Ausgabe zeigt uns, dass der Fehler in Zeile 2 aufgetreten ist. Aber können Sie erraten, warum?
Die Antwort ist einfach. Wir wissen, dass alles in einfachen oder doppelten Anführungszeichen in Python ein String ist.
Hier ist der Wert 19
in doppelte Anführungszeichen eingeschlossen, was bedeutet, dass es sich um einen String-Datentyp handelt und wir den Modulo-Operator (%
) nicht darauf anwenden können.
age = "19"
if age % 10:
print("Your age is a lucky number")
Ausgang:
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: not all arguments converted during string formatting
Um dies zu korrigieren, verwenden wir den Formatbezeichner int()
, wie unten beschrieben.
age = "19"
if int(age) % 10:
print("Your age is a lucky number")
Ausgang:
Your age is a lucky number
Diesmal läuft der Code einwandfrei.
Ungleiche Anzahl von Formatbezeichnern und Werten in Python
Wir wissen, dass wir während der Zeichenfolgenformatierung so viele Formatbezeichner einfügen wie die Anzahl der zu formatierenden Werte. Was aber, wenn mehr oder weniger Werte als die Anzahl der in der Zeichenfolge angegebenen Formatbezeichner vorhanden sind?
Sehen Sie sich diesen Code an. Hier haben wir drei Variablen und wollen nur zwei davon in den String einfügen.
Aber wenn wir die Argumente in der print
-Anweisung übergeben, übergeben wir alle drei, was zweifellos zu TypeError
führt.
lead_actor = "Harry Potter"
co_actor = "Ron Weasley"
actress = "Hermione Granger"
print("The males in the main role were: %s and %s." % (lead_actor, co_actor, actress))
Ausgang:
Traceback (most recent call last):
File "<string>", line 5, in <module>
TypeError: not all arguments converted during string formatting
Lassen Sie uns die letzte Variable Schauspielerin
aus der Liste der Argumente entfernen und dann dieses Programm erneut ausführen.
lead_actor = "Harry Potter"
co_actor = "Ron Weasley"
actress = "Hermione Granger"
print("The males in the main role were: %s and %s." % (lead_actor, co_actor))
Ausgang:
The males in the main role were: Harry Potter and Ron Weasley.
Sie können sehen, dass der Code dieses Mal einwandfrei läuft, da die Anzahl der Formatbezeichner innerhalb der Zeichenfolge gleich der Anzahl der als Argumente übergebenen Variablen ist.
Beachten Sie, dass der zu verwendende Formatbezeichner vom Datentyp der Werte abhängt, der in diesem Fall %s
ist, da wir es mit dem Datentyp String zu tun haben.
Verwendung unterschiedlicher Formatbezeichner in derselben Zeichenfolge in Python
Wir wissen, dass es mehrere Möglichkeiten gibt, eine Zeichenfolge in Python zu formatieren, aber sobald Sie eine Methode ausgewählt haben, müssen Sie nur diese Methode in einer einzelnen Zeichenfolge befolgen. Mit anderen Worten, Sie können nicht verschiedene Arten von String-Formatierungsmethoden in einer einzigen Anweisung mischen, da dies zu TypeError: not all arguments converted during string formatting
führt.
Sehen Sie sich den folgenden Code an, um dieses Konzept besser zu verstehen.
Wir verwenden placeholders({})
innerhalb des Strings, um diesen String zu formatieren, aber wir übergeben die Argumente nicht wie zuvor als Tupel. Stattdessen wird einer der Variablen ein Modulo-Operator (%
) vorangestellt, der anderen nicht.
Dies führt zum TypeError
.
lead_actor = "Harry Potter"
co_actor = "Ron Weasley"
actress = "Hermione Granger"
print("The males in the main role were: {0} and {1}." % lead_actor, co_actor)
Ausgang:
Traceback (most recent call last):
File "<string>", line 5, in <module>
TypeError: not all arguments converted during string formatting
Um dies zu beheben, können wir zwei Dinge tun.
-
Wenn Sie innerhalb des Strings
placeholders({})
verwenden möchten, müssen Sie die Methodeformat()
mit dem Punktoperator (.
) verwenden, um die Argumente zu übergeben. Dies geschieht unten.lead_actor = "Harry Potter" co_actor = "Ron Weasley" actress = "Hermione Granger" print("The males in the main role were: {0} and {1}.".format(lead_actor, co_actor))
Ausgang:
The males in the main role were: Harry Potter and Ron Weasley.
Sie können sehen, dass der Code dieses Mal gut läuft.
-
Der andere Weg könnte darin bestehen, die Verwendung von
Platzhaltern ({})
zu streichen und an ihrer Stelle Formatbezeichner zu verwenden, zusammen mit der Übergabe der Argumente als Tupel, dem der Modulo-Operator (%
) vorangestellt ist. Dies geschieht wie folgt.lead_actor = "Harry Potter" co_actor = "Ron Weasley" actress = "Hermione Granger" print("The males in the main role were: %s and %s." % (lead_actor, co_actor))
Ausgang:
The males in the main role were: Harry Potter and Ron Weasley.
Beachten Sie, dass der Modulo-Operator (
%
) für die Formatierung ein alter Stil ist, während andererseits die Verwendung der Platzhalter mit der.format()
-Methode eine neue Methode der Zeichenfolgenformatierung in Python ist.
Das ist es für diesen Artikel. Weitere Informationen zur Zeichenfolgenformatierung in Python finden Sie in dieser Dokumentation.
Abschluss
In diesem Artikel haben wir über die verschiedenen Gründe gesprochen, die zu TypeError: Not all arguments converted during string formatting
in Python geführt haben, zusammen mit den möglichen Korrekturen.
Verwandter Artikel - Python Error
- Adresse wird bereits verwendet Fehler in Python
- AttributeError: __Exit__ in Python
- AttributeError: 'Dict'-Objekt hat kein Attribut 'Append' in Python
- AttributeError: 'NoneType'-Objekt hat kein Attribut 'Text' in Python
- AttributeError: Int-Objekt hat kein Attribut
- AttributeError: Modul Urllib hat keine Attributanforderung