我有这段代码:
def fit(self,p1,p2,w):
p=p1
m=self.bit(p,w)
if p1.y!=p2.y:
if m&0x30:
p.y=w.y1 if m&0x10 else w.y2-1
try:
p.x=int((p.y-p2.y)*(p1.x-p2.x)/(p1.y-p2.y)+p2.x)
except Exception,e:
print e
print p1.y!=p2.y
print p1.y,p2.y
输出结果为:
cannot convert float NaN to integer
False
199 199.0
我不知道为什么p1.y!=p2.y
评估为true,然后在异常中评估为false
我正在运行python 2.6.6
答案 0 :(得分:1)
您正在划分0/0
!
# (p.y-p2.y)*(p1.x-p2.x)
x = p.y - p2.y
x = 199 - 199.0 = 0
x1 = p1.x-p2.x
0 * x1 = 0* p1.x - 0* p2.x
这意味着
(p.y-p2.y)*(p1.x-p2.x) = 0
现在我们正在设计0:
#(p1.y-p2.y)
p1.y-p2.y
x = p.y - p2.y
x = 199 - 199.0 = 0
因此,在这种情况下,您正尝试0/0
然后在整个事情结束时,您尝试添加p2.x
,我相信这就是为什么您收到错误cannot convert float NaN to integer
而不是ZeroDivisionError: integer division or modulo by zero
它很容易解决。将if p1.y!=p2.y:
第4行更改为If p1.y-p2.y != 0: