SymPy求导TypeError问题:NoneType与float无法减法运算的修复
问题修复方案
错误原因
你的f_derivative函数仅执行打印操作,没有返回导数值,调用f_derivative(1)时会返回None。assert语句中尝试用None和浮点数做减法,因此触发TypeError。
修正步骤
- 让函数返回计算得到的导数值,而非仅打印
- 替换
**0.5为sympy.sqrt(),符号运算精度更高 - 移除函数参数里的
x(原参数被内部的SymPy符号变量覆盖,未实际使用,移除后避免混淆)
修正后的代码
import sympy def f_derivative(): x = sympy.Symbol('x') # 用sympy.sqrt替代**0.5,保持符号运算的准确性 f = x - 5 + sympy.sqrt(4 - x**2) derivative_f = f.diff(x) derivative_f = sympy.lambdify(x, derivative_f) result = derivative_f(1) print(result) # 返回计算结果,供assert校验调用 return result # 调用查看结果 f_derivative() # 用返回值做断言校验,加abs避免微小正负差导致失败 assert abs(f_derivative() - 0.42264973) < 1e-5
额外说明
- 用
abs()包裹差值是为了兼容计算结果的微小正负偏差,比如实际计算结果为0.4226497308103742,和给定的0.42264973的差值在1e-5范围内,但直接相减可能为正或负,绝对值判断更稳妥。
内容的提问来源于stack exchange,提问作者Phung Doan
相关产品推荐
相关产品推荐

