Python-Schrö;丁格尔';s Int/None
这是一个非常奇怪的问题 我有一些django管理代码,持续时间以秒为单位,四舍五入到下一分钟,然后乘以10。(原因与此无关) 下面的代码给出了以下错误: +不支持的操作数类型:'NoneType'和'int'Python-Schrö;丁格尔';s Int/None,python,django,int,nonetype,Python,Django,Int,Nonetype,这是一个非常奇怪的问题 我有一些django管理代码,持续时间以秒为单位,四舍五入到下一分钟,然后乘以10。(原因与此无关) 下面的代码给出了以下错误: +不支持的操作数类型:'NoneType'和'int' def charge(self, obj): return int((obj.duration + 59) / 60) * 10 如果我测试None ness,然后进行计算,则代码有效: def charge(self, obj): dur = obj.duration
def charge(self, obj):
return int((obj.duration + 59) / 60) * 10
如果我测试None ness,然后进行计算,则代码有效:
def charge(self, obj):
dur = obj.duration
if dur is None:
return dur
else:
return int((dur + 59) / 60) * 10
在这两种情况下,obj.duration的结果是相同的
这是怎么回事
更新--问题理解:虽然我用if“解决”了这个问题。。。其他的事实上,真正的问题是我不明白obj到底发生了什么。以下是Django文档中的相关页面:
可能在一种情况下是
无
,而在另一种情况下不是?如果您已经自己解决了,为什么会出现问题?问题在于生成obj.duration
的代码中,有时是None
。显然obj.duration
可能是None
,如果您不将传递的内容作为obj
共享,我们无法解释为什么。您所说的“代码有效”是什么意思?你的意思是说没有例外,还是说计算确实有效?在第二个代码块中,如果obj.duration
为None
(并且假设输入相同,我们从早期回溯中知道它是None
),则可以避免计算,并且charge()
返回None
。这是否构成“工作”?顺便说一句,您可能可以使用一行(三元运算符)减少None checking函数的条件语句:如果dur是None-else int((dur+59)/60)*10,则返回dur