繁体   English   中英

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

[英]TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType

我需要将 object 的边缘涂上颜色。 我知道 python 很差,但是我的老师给出了这个代码,这就是它发生的事情。

def triangleArea(half_edge):

    a = len (half_edge)
    b = len (half_edge.edge_next)
    c = len (half_edge.edge_next.edge_next)
    
    s = (a + b + c) / 2
    area = math.sqrt(s * (s - a)*(s - b)*(s - c))
    return area

def angle(half_edge):
    
   v1 = half_edge.vertex
   v2 = prev(half_edge).vertex
   v3 = half_edge.edge_next.vertex
   
   angle = math.acos(((v2.co.x - v1.co.x)*(v3.co.x - v1.co.x)+(v2.co.y - v1.co.y)*(v3.co.y - v1.co.y)+(v2.co.z - v1.co.z)*(v3.co.z -v1.co.z))/(len(prev(half_edge))*len(half_edge)))
   
   if (angle > math.pi / 2):
       print (">90")
       return angle
   
def curvature(v):
    anglesSum = 0  
    completeArea = 0
    for e in h_edge_list:
        if (v == e.vertex):
            start_edge = e
            anglesSum += angle(start_edge)
            completeArea += triangleArea(start_edge)
            
    half_edge = start_edge.edge_next
    cur = (2*math.pi - anglesSum)/completeArea
    color (half_edge, cur, 0.13, 0.29)#farbime z intervalu 0 az 2/3
    return cur

for e in h_edge_list:
    print (curvature(e.vertex))
      
bmesh.free()  # free and prevent further access

S 运算符的最后几行代码出错 在此处输入图像描述

当此条件为 False 时,您的angle function 返回None

if (angle > math.pi / 2):
   print (">90")
   return angle

这就是您当前angle function 的return方式

def angle(half_edge):
    
   v1 = half_edge.vertex
   v2 = prev(half_edge).vertex
   v3 = half_edge.edge_next.vertex
   
   angle = math.acos(((v2.co.x - v1.co.x)*(v3.co.x - v1.co.x)+(v2.co.y - v1.co.y)*(v3.co.y - v1.co.y)+(v2.co.z - v1.co.z)*(v3.co.z -v1.co.z))/(len(prev(half_edge))*len(half_edge)))
   
   if (angle > math.pi / 2):
       print (">90")
       return angle
   return None

如果(angle > math.pi / 2)条件为False ,则返回 None

也许你想返回angle值,无论条件是什么(这使得 if 语句变得不必要),通过减少它的缩进标签

def angle(half_edge):
    
   v1 = half_edge.vertex
   v2 = prev(half_edge).vertex
   v3 = half_edge.edge_next.vertex
   
   angle = math.acos(((v2.co.x - v1.co.x)*(v3.co.x - v1.co.x)+(v2.co.y - v1.co.y)*(v3.co.y - v1.co.y)+(v2.co.z - v1.co.z)*(v3.co.z -v1.co.z))/(len(prev(half_edge))*len(half_edge)))
   
   if (angle > math.pi / 2):
       print (">90")
   return angle

如果此条件为False ,则此if语句将返回None

if (angle > math.pi / 2):
   print (">90")
   return angle

您需要在角度 function 中至少添加一条else语句。

如果不满足内部条件,则角度 function 将返回NoneType ,并且 += 运算符不能与 NoneType 值一起使用。 尝试返回 0。

if (angle > math.pi / 2):
    print (">90")
    return angle
else:
    return 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM