TypeError: __str__ Nicht-String zurückgegeben, aber Ausgabe gedruckt
- Python hat einen Non-String-Fehler zurückgegeben, aber die Ausgabe gedruckt
-
TypeError auflösen:
__str__
Nicht-String zurückgegeben -
__str__
Zurückgegebener Nicht-String mit__repr__()
Dieser Artikel zielt darauf ab, das Problem zu lösen, das auftritt, wenn wir versuchen, die Zeichenfolge zu drucken, anstatt eine return-Anweisung in der Funktion zu verwenden.
Python hat einen Non-String-Fehler zurückgegeben, aber die Ausgabe gedruckt
Der folgende Code zeigt den TypeError: __str__
gab keinen String zurück, druckt aber trotzdem die Ausgabe.
Beispielcode:
class xy:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
print("X={0}, Y={1}")
if __name__ == "__main__":
x_y = xy("value of x is 1", "value of y is 2")
print(x_y)
Ausgang:
TypeError Traceback (most recent call last)
<ipython-input-1-7b40a083df6c> in <module>
10 if __name__ == "__main__":
11 x_y = xy('value of x is 1','value of y is 2')
---> 12 print(x_y)
TypeError: __str__ returned non-string (type NoneType)
Warum erhalten wir einen Fehler, d. h. __str__
gibt einen Nicht-String zurück (Typ NoneType)? Zuerst müssen wir die Funktionsweise des Operators __str__
verstehen.
Der Operator __str__
ist in erster Linie darauf ausgelegt, den String zurückzugeben, aber wir verwenden ihn meistens, um den String auszugeben. Es gibt zwei Begriffe für __str__
in Python, die synonym verwendet werden, Operator oder Dunder-Methode.
Im obigen Code ruft die Methode __str__
direkt die Funktion print()
auf und gibt den String aus, gibt aber keinen String zurück; Deshalb zeigt es den obigen Fehler.
Außerdem gibt unser Operator __str__
den String aus und gibt nichts zurück; Deshalb wird fälschlicherweise None verwendet.
TypeError auflösen: __str__
Nicht-String zurückgegeben
Wir können dieses Problem mit der return-Anweisung in der Methode __str__
lösen. Also müssen wir den String in der Methode __str__
zurückgeben, anstatt ihn auszugeben. Siehe folgenden Code.
Beispielcode:
class xy:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return ("X={0}, Y={1}").format(self.x, self.y)
if __name__ == "__main__":
x_y = xy("value of x is 1", "value of y is 2")
print(x_y)
Ausgang:
X=value of x is 1, Y=value of y is 2
Der obige Code hat ein weiteres Problem. Und das Problem ist, wenn der Wert, den wir zurückgeben, kein String ist, wird der genaue Fehler angezeigt, aber diesmal ist der Variablentyp nicht None
.
Beispielcode:
class xy:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return 123
if __name__ == "__main__":
x_y = xy("value of x is 1", "value of y is 2")
print(x_y)
Ausgang:
TypeError Traceback (most recent call last)
<ipython-input-9-173c41d63dab> in <module>
12 if __name__ == "__main__":
13 x_y = xy('value of x is 1','value of y is 2')
---> 14 print(x_y)
TypeError: __str__ returned non-string (type int)
Um es zu lösen, müssen wir den Wert typisieren und mit der Methode str()
umschließen, was bedeutet, dass der Typ der Variablen in einen String konvertiert wird, da dies die Anforderung der Methode str
ist.
Beispielcode:
class xy:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return str(123)
if __name__ == "__main__":
x_y = xy("value of x is 1", "value of y is 2")
print(x_y)
Ausgang:
123
Jetzt läuft der Code für alle möglichen Fälle, weil wir alle erwarteten Probleme gelöst und die Anforderungen der str
-Methode erfüllt haben, d.h. sie gibt nur den String-Wert zurück.
__str__
Zurückgegebener Nicht-String mit __repr__()
Die Methode __repr__()
macht dasselbe wie die Methode str
. Siehe folgenden Code.
Beispielcode:
class calculate(object):
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def __repr__(self):
print("(%r, %r, %r)" % (self.x, self.y, self.z))
equation = calculate(1, 2, 3)
print(equation)
Ausgang:
(1, 2, 3)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-0ee74d4c74c8> in <module>
8
9 equation = calculate(1, 2, 3)
---> 10 print(equation)
TypeError: __str__ returned non-string (type NoneType)
Der obige Code gibt auch die Zeichenfolge aus, anstatt sie von der Methode __repr__()
zurückzugeben. Daher können wir es lösen, indem wir die return
-Anweisung verwenden, anstatt den String mit der __repr__()
-Methode auszugeben.
Beispielcode:
class calculate(object):
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def __repr__(self):
return str("(%r, %r, %r)" % (self.x, self.y, self.z))
equation = calculate(1, 2, 3)
print(equation)
Ausgang:
(1, 2, 3)
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedInVerwandter 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