不支持NoneType与str的操作类型
我收到了一个消息,上面写着:
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
。继续找原因。