类型错误:__str__ 返回非字符串(类型 NoneType)

TypeError: _ _ str _ _返回非字符串(类型 NoneType)

TypeError: __str__ returned non-string (type NoneType)

Python“TypeError: _ _ str _ _ returned non-string (type NoneType)”发生在我们忘记从方法返回值时__str__()

要解决该错误,请确保从该方法返回一个字符串。

typeerror str 返回非字符串类型 nonetype

下面是错误如何发生的示例。

main.py
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 语句从该方法返回一个字符串。

main.py
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()类对其进行转换。

main.py
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__这是必要的,因为不允许从方法返回不同类型的值

下面是一个尝试从该方法返回整数的示例。

main.py
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.

如果需要在字符串中包含表达式,则可以使用
格式化字符串文字。

main.py
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-strings) 让我们通过在字符串前加上f.

确保将表达式括在大括号 – 中{expression}

您还可以使用
加法 (+) 运算符连接字符串。

main.py
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: