Python课程作业报错:__str__返回非字符串(NoneType)求助
解决
TypeError: __str__ returned non-string (type NoneType) 问题 嘿,我刚碰到过一模一样的坑!这个错误的核心原因特别明确:你的某个类的__str__(或者__repr__)方法没有返回字符串类型的值——要么是完全没写return语句(默认返回None),要么是返回的表达式出了问题(比如拼写错误导致变量不存在,或者拼接了非字符串类型却没转换)。
先看你给出的Course类代码片段,里面的__repr__明显没写完——return "Title: " + sel...这里的sel应该是self吧?而且只拼接了标题,最好把ID也加上,还要确保返回的是完整字符串。我们先把这个类补全修正:
class Course: def __init__(self, title="", ID=0): self._ID = ID self._title = title def getID(self): return self._ID def getTitle(self): return self._title def setTitle(self, title): self._title = title def setID(self, ID): self._ID = ID def __repr__(self): # 用f-string确保返回字符串,同时包含所有关键属性 return f"Course(Title: '{self._title}', ID: {self._ID})" # 要是需要更友好的打印输出,可以定义__str__ def __str__(self): return f"课程: {self._title} (ID: {self._ID})"
接下来看你卡壳的两个继承类,大概率是你在它们的__str__或__repr__里犯了下面这些错:
- 忘记写
return语句,比如用print()代替return(print只是输出到控制台,不会返回字符串) - 变量名拼写错误(比如把
self写成sel),导致表达式报错或者返回None - 拼接字符串时混合了非字符串类型(比如直接把数字ID和字符串拼接,没转成
str(ID))
举个你可能踩过的错误子类例子:
# 错误写法!__str__没有return,默认返回None class UndergradCourse(Course): def __init__(self, title="", ID=0, credits=3): super().__init__(title, ID) self._credits = credits def __str__(self): # 这里用了print而不是return,会触发错误 print(f"本科课程: {self._title}, ID: {self._ID}, 学分: {self._credits}")
修正后的子类写法:
class UndergradCourse(Course): def __init__(self, title="", ID=0, credits=3): super().__init__(title, ID) self._credits = credits def __str__(self): # 明确return一个字符串 return f"本科课程: {self._title}, ID: {self._ID}, 学分: {self._credits}" def __repr__(self): # 同样确保__repr__返回字符串,方便调试 return f"UndergradCourse(Title: '{self._title}', ID: {self._ID}, Credits: {self._credits})"
最后给你几个排查小技巧:
- 检查所有子类的
__str__和__repr__方法,确保每个方法都有return语句 - 拼接字符串优先用f-string(自动处理类型转换,不容易出错)
- 可以单独调用
str(你的对象)或者repr(你的对象)来测试,定位到底是哪个类的方法出问题
内容的提问来源于stack exchange,提问作者JoshMerMun
相关产品推荐
相关产品推荐

