求助:运行Python代码时出现TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'int'错误
计算圆面积时出现TypeError错误的解决方法
错误信息
TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'int'
问题代码
import math def distance (x1,y1,x2,y2): horizontal=x2-x1 vertical=y2-y1 horizontal_squared=horizontal**2 vertical_squared=vertical**2 distance=math.sqrt(horizontal_squared+vertical_squared) print(distance) def area(radius): math.pi*radius**2 def area_circle(xc,yc,xp,yp): r=distance(xc,yc,xp,yp) result=area(r) print (result) area_circle(1,2,3,6)
问题分析
你的怀疑是对的,distance函数确实返回了None——Python函数如果没有显式的return语句,默认会返回None。你在distance里只做了print(distance),没有把计算结果返回给调用方,所以r = distance(...)里的r就是None。
另外area函数也有同样的问题:它计算了圆面积的表达式,但没有用return返回结果,所以result = area(r)里的result也是None。
当area函数尝试用None执行**2运算时,就触发了这个TypeError。
修复后的代码
import math def distance(x1, y1, x2, y2): horizontal = x2 - x1 vertical = y2 - y1 horizontal_squared = horizontal ** 2 vertical_squared = vertical ** 2 distance = math.sqrt(horizontal_squared + vertical_squared) print(distance) # 如需打印距离可保留,不需要则删除 return distance # 关键:返回计算得到的距离值 def area(radius): return math.pi * radius ** 2 # 关键:返回计算的面积值 def area_circle(xc, yc, xp, yp): r = distance(xc, yc, xp, yp) result = area(r) print(result) area_circle(1, 2, 3, 6)
修复说明
- 给
distance函数添加return distance,让它把计算出的距离值返回给调用者,这样r就能拿到有效数值而非None。 - 给
area函数添加return语句,返回计算好的圆面积,确保result能得到正确的面积值。
内容的提问来源于stack exchange,提问作者Baziga
相关产品推荐
相关产品推荐

