Python-Schrö;丁格尔';s Int/None

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

这是一个非常奇怪的问题

我有一些django管理代码,持续时间以秒为单位,四舍五入到下一分钟,然后乘以10。(原因与此无关)

下面的代码给出了以下错误:

+不支持的操作数类型:'NoneType'和'int'

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