Python温度电阻计算程序报NoneType格式化错误如何修复?
错误原因
你遇到的TypeError: unsupported format string passed to NoneType.__format__报错和zip方法无关,核心原因是resistance_from_temperature函数没有写return语句:Python中所有函数默认返回None,你计算完result后没有返回该值,因此生成的resistances列表中所有元素都是None,对None使用.3f格式化规则自然会触发报错。
另外你代码中还有两处缩进错误会导致运行异常:
make_solve函数中for element in R:行缩进层级错误get_list_of_second_parameters函数的return语句没有缩进进函数体,属于语法错误
同时你make_solve函数定义时传入了temperatures、resistances两个参数,但函数内部直接调用了全局的T、R变量,参数没有实际生效,属于冗余问题。
修复方案
- 给
resistance_from_temperature函数末尾添加return result语句,返回计算得到的电阻值 - 修正两处缩进错误,保证代码语法合法
- 调整
make_solve函数的内部逻辑,使用传入的参数而非全局变量,避免潜在问题
修复后完整代码
import numpy as np K = 273.15 T = [1.4, 25, 72] R = [3440, 1175, 453] def make_solve(temperature_kalvin: float, temperatures: list, resistances: list): matrix_a = [] for element in resistances: matrix_a.append([1, np.log(element), pow(np.log(element), 3)]) matrix_b = np.array([1 / (t + temperature_kalvin) for t in temperatures]) solve = np.linalg.solve(np.array(matrix_a), matrix_b) return solve def resistance_from_temperature(temperature: float, parameter_a: float, parameter_b: float, parameter_c: float): x = 1 / parameter_c * (parameter_a - 1 / temperature) y = pow((pow((parameter_b / (3 * parameter_c)), 3) + pow(x / 2, 2)), .5) result = np.exp((y - x / 2) ** (1 / 3) - (y + x / 2) ** (1 / 3)) / 7.3 return result def get_list_of_second_parameters(): solves = make_solve(K, T, R) temperatures = np.linspace(0 + K, 100 + K, 101) resistances = [resistance_from_temperature(temperature, solves[0], solves[1], solves[2]) for temperature in temperatures] return temperatures, resistances def main(): temperatures, resistances = get_list_of_second_parameters() for temperature, resistance in zip(temperatures, resistances): print(f'T[C] = {temperature - 273.15:.2f} \t R = {resistance:.3f}') input() main()
内容的提问来源于stack exchange,提问作者MaybeYesMaybeNo
相关产品推荐
相关产品推荐

