TypeError: _ _ str _ _返回非字符串(类型 NoneType)
TypeError: __str__ returned non-string (type NoneType)
Python“TypeError: _ _ str _ _ returned non-string (type NoneType)”发生在我们忘记从方法返回值时__str__()
。
要解决该错误,请确保从该方法返回一个字符串。
下面是错误如何发生的示例。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): print(self.name) # 👈️ forgot to return value emp = Employee('Bobby Hadz', 100) # ⛔️ TypeError: __str__ returned non-string (type NoneType) print(emp)
__str__()
我们忘记了从类中的方法返回一个值Employee
。
使用return
语句从中返回一个值__str__()
要解决该错误,请使用
return 语句从该方法返回一个字符串。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return self.name # 👈️ return a string emp = Employee('Bobby Hadz', 100) print(emp) # 👉️ Bobby Hadz
该方法的返回值__str__()
必须是一个字符串对象。
该__str__()
方法必须返回一个字符串类型的值
如果您返回的值不是字符串,请使用
str()类对其进行转换。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return str(self.salary) # 👈️ return a string emp = Employee('Bobby Hadz', 100) print(emp) # 👉️ 100
我们使用该类str
将整数转换为字符串。
__str__
这是必要的,因为不允许从方法返回不同类型的值
。
下面是一个尝试从该方法返回整数的示例。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): # ⛔️ TypeError: __str__ returned non-string (type int) return self.salary emp = Employee('Bobby Hadz', 100) print(emp) # 👉️ 100
代码示例导致以下错误。
Traceback (most recent call last): File "/home/borislav/Desktop/bobbyhadz_python/main.py", line 12, in <module> print(emp) # 👉️ 100 ^^^^^^^^^^ TypeError: __str__ returned non-string (type int)
我们试图从该__str__
方法返回一个整数,这导致了
TypeError
.
如果需要在字符串中包含表达式,则可以使用
格式化字符串文字。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return f'Name of employee: {self.name}' emp = Employee('Alice', 100) print(emp) # 👉️ Name of employee: Alice
f
.确保将表达式括在大括号 – 中{expression}
。
您还可以使用
加法 (+) 运算符连接字符串。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return 'Salary: ' + str(self.salary) emp = Employee('Bobby Hadz', 100) print(emp) # 👉️ Salary: 100
请注意,我们必须使用该类str()
将属性转换salary
为字符串。
这是必要的,因为加法 (+) 运算符左右两侧的值需要是兼容的类型(例如,两个字符串或两个数字)。
The
__str__()
method is called by str(object)
and the built-in functions format()
and
print() and returns the informal string
representation of the object.
# Additional Resources
You can learn more about the related topics by checking out the following
tutorials:
- How to access Parent class Attributes in Python
- How to Add attributes to an Object in Python
- Call a class method from another Class in Python
- Purpose of ‘return self’ from a class method in Python
- Convert a string to a Class object in Python
- Creating class instances from a Dictionary in Python
- How to Create an incremental ID in a Class in Python
- How to get all Methods of a given Class in Python
- How to get the File path of a Class in Python