不支持NoneType与str的操作类型

3 投票
2 回答
12690 浏览
提问于 2025-04-16 10:08

我收到了一个消息,上面写着:

Traceback (most recent call last):
 File "/var/www/fosa/error_supressor.py", line 46, in <module>
   sys.stderr.write(latest + '\n')
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

我已经试着解决这个问题好几天了,但老实说,我的编程水平还很差。所以让我们把问题理清楚,看看有没有耐心的人愿意花点时间来帮一个陌生人解决问题 :-)

除此之外,当我查看我的错误日志时,发现了这个错误信息,我怀疑这和我的问题有关:

File "/var/www/fosa/app/controllers/client/client.py", line 601, in detail
    if not course.bookable or not course.school.partner.active: # both objects are boolean 
AttributeError: 'NoneType' object has no attribute 'bookable'

2 个回答

3

从错误信息来看,很明显有两个变量的问题:

  • latest 是空的(None)
  • course 也是空的(None)

在Python中,一个常见的做法是让变量的名字总是和一种特定的类型绑定在一起,只有在最有意义的值是“空值”的时候,才会把变量设置为 None。比如说,假设 get(pk) 从数据库中获取一个对象,但如果这个键 pk 没有对应的对象,它就会返回 None。要修复这个错误,我会这样做:

写一些类似于:

if latest is None:
     # do something
else:
     sys.stderr.write(latest + '\n')

或者也可以写:

sys.stderr.write('%s\n' % latest) #so that latest can be of any type

而不是:

sys.stderr.write(latest + '\n')
4
  • 有东西把 None 绑定到了 latest。找出是什么原因,然后修正你的逻辑错误。

  • 有东西把 None 绑定到了 course。继续找原因。

撰写回答