Python入门学习者遇TypeError问题求助:eval()参数类型错误
解决eval()引发的TypeError错误
问题代码
p1, p2 = eval(input("input the share price of two organizations: ")) if (p1>p2): print("the first organization is performing better")
报错信息
TypeError: eval() arg 1 must be a string, bytes or code object
错误原因
这个错误大概率是因为你在Python 2环境下运行代码导致的。Python 2中input()函数会直接对用户输入的内容求值,返回数值或元组对象,而eval()要求传入字符串类型参数,因此触发类型错误。另外,即便在Python 3中,eval()也存在安全风险(可能执行恶意输入代码),不推荐用于处理用户输入。
解决办法
办法1:适配Python 2环境
把input()替换为raw_input(),Python 2中raw_input()会返回用户输入的原始字符串,满足eval()的参数要求:p1, p2 = eval(raw_input("input the share price of two organizations: ")) if p1 > p2: print("the first organization is performing better")办法2:更安全的输入处理(推荐)
无论Python版本,都可以用split()分割输入字符串,再转换为数值类型,彻底避免eval()的安全隐患:# Python 3版本 user_input = input("请输入两家机构的股价(用逗号分隔): ") p1, p2 = map(float, user_input.split(",")) if p1 > p2: print("第一家机构表现更好") # Python 2版本 user_input = raw_input("请输入两家机构的股价(用逗号分隔): ") p1, p2 = map(float, user_input.split(",")) if p1 > p2: print("第一家机构表现更好")使用此方法时,用户需按
数值, 数值的格式输入,例如45.6, 78.9。
内容的提问来源于stack exchange,提问作者Rajat Rai
相关产品推荐
相关产品推荐

