我正在学习Python 3.x,我想编写一个函数来计算输入的值并打印结果。如果字符串最初是输入的,函数应该只打印字符串而不进行求值。
def eval_input():
line=input("Something:")
print(eval(line))
eval_input()
它可以很好地处理整数和数学运算。
但是当一个字符串被输入时,比如“fasdfasd
”,它会得到一个错误:“name 'fasdfasd' is not defined
”。
我明白为什么会发生这个错误。因为“fasdfasd
”被视为变量。
但我不知道如何检查字符串是否是最初输入的?
如何在计算输入之前从输入中填充字符串?
好吧,作为一个回答我要把这个
但是你真的不想使用eval,它的邪恶,肮脏,导致错误和安全风险,并且很难开发,调试和正确使用
如果你正在接受用户输入,假设你知道你要的是什么,应该是什么类型。你需要写一个验证器。你可以用正则表达式,或者更基本的是用“casts”,或者转换函数来实现。
例如,如果要查找整数,请使用
int
将其转换,并检查是否有错误。告诉用户输入一个数字。如果
int
函数不能解析它,它将引发ValueError,只有这样,您才能很容易地知道您得到的不是数字。对于
float
也可以这样做。你从input
得到的总是一个str
,所以如果这就是你想要的,就用它。第一:依赖
eval()
很少是个好主意。您只需捕获
NameError
(以及SyntaxError
),并假设输入是一个字符串:这里可能会出现其他异常,但接下来要避免使用
eval()
我还想提醒您不要使用毯子except:
或except Exception:
处理程序,这些通常也是不好的主意。更好的方法是使用^{} 代替:
literal_eval
只接受python文本值(因此'string'
或123
或('some', 'more', [1, 2, 4.5], 'complex structure')
),如果无法解析该输入,则将抛出ValueError
。它没有受到
eval()
所遭受的安全问题的困扰,也不需要捕获那么多异常,只需要处理ValueError
。相关问题 更多 >
编程相关推荐