Python使用sympy的parse_expr解析用户输入函数报TypeError问题
错误原因
- 报错
TypeError: expecting local_dict to be a dict是调用parse_expr函数时传参类型错误导致的:parse_expr的第二个位置参数为local_dict,要求传入字典类型的变量映射规则,你直接传入了x这个Symbol对象,不符合参数类型要求,触发类型错误。
修复方案
修改parse_expr的传参格式即可,有两种常用实现可选:
方案1:直接传入符合要求的变量映射字典
将符号x放到字典中传入,字典的键为表达式中对应的变量名字符串,修改对应代码行为:
function = parse_expr(function, local_dict={'x': x})
如果省略参数名,也要保证第二个参数是字典,写法如下:
function = parse_expr(function, {'x': x})
方案2:开启更友好的输入适配(可选)
如果需要支持用户省略乘号输入(比如输入2x自动识别为2*x),可以引入sympy内置的转换规则,完整修改后的代码如下:
from sympy import* import sympy as smp import numpy as np from sympy.parsing.sympy_parser import parse_expr, standard_transformations, implicit_multiplication_application print("Welcome...") x = smp.Symbol('x') function = input("Enter your function in terms of X\nIf you want to use Fixed point method input de G(x) expresion\n") # 配置转换规则 transformations = standard_transformations + (implicit_multiplication_application,) function = parse_expr(function, local_dict={'x': x}, transformations=transformations)
内容的提问来源于stack exchange,提问作者Juan Arango
相关产品推荐
相关产品推荐

