Beheben Sie den TypeError: Not All Arguments Converted While String Formatting in Python

Shikha Chaudhary 21 Juni 2023
  1. Ursachen und Lösungen für TypeError: Not All Arguments Converted While String Formatting in Python
  2. Abschluss
Beheben Sie den TypeError: Not All Arguments Converted While String Formatting in Python

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.

  1. Wenn Sie innerhalb des Strings placeholders({}) verwenden möchten, müssen Sie die Methode format() 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.

  2. 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

Verwandter Artikel - Python TypeError