Python如何将字符串形式的方法转为可执行方法并应用到字符串变量
实现方案
方案1:修正eval写法(不推荐,存在安全风险)
你之前调用eval报错的原因是表达式里的car被Python识别为未定义的变量,而非字符串值,调整写法直接引用已定义的变量a即可:
a = "car" b = ".title()" c = eval(f"a{b}") print(c) # 输出:Car
如果b的内容不受信任,该方法会导致任意代码执行漏洞,因此更推荐使用无安全风险的方案2。
方案2:使用反射调用(推荐,安全稳定)
先从b中提取出方法名,再通过getattr获取字符串对象对应的方法调用即可:
a = "car" b = ".title()" # 提取方法名,去除前后的点和括号 method_name = b.strip('.()') # 反射调用对应方法 c = getattr(a, method_name)() print(c) # 输出:Car
之前两次尝试失败的原因:
- 第一次
eval("car.title()"):Python将表达式中的car作为变量名查找,你没有定义名为car的变量,因此触发NameError- 第二次
format拼接:仅生成了字符串形式的表达式,没有实际执行表达式逻辑,因此得到的是字符串'car.title()'而非方法调用结果
内容的提问来源于stack exchange,提问作者Sevamove
相关产品推荐
相关产品推荐

