以 eval() 函数为例,用代码演示常犯的错误:
s="hello" print(eval(s))输出结果为:
Traceback (most recent call last):
File "C:UsersmengmaDesktopdemo.py", line 2, in
print(eval(s))
File "
NameError: name 'hello' is not defined
如果要将字符串 hello 通过 print 函数打印出来,可以写成如下的样子:
s="hello"
print(eval('s')) 输出结果为:
hello
这种写法是要 eval() 执行 "hello" 这句代码。这个 hello 是有引号的,在代码中代表字符串的意思,所以可以执行。同理,也可以写成这样:
s='"hello"' #s 是个字符串,字符串的内容是带引号的 hello print(eval(s))输出结果为:
hello
这种写法的意思是 s 是个字符串,并且其内容是个带引号的 hello。所以直接将 s 放入到函数 eval() 中也可以执行。除了以上这种方式,还可以不去改变原有字符串 s 的写法,直接使用 repr() 函数来进行转化,也可以得到同样的效果。例如:
s="hello" print(eval(repr(s))) #使用函数 repr() 进行转化输出结果为:
hello
注意,虽然函数 eval() 与 str() 的返回值都是字符串。但是使用 str() 函数对 s 进行转化,程序同样会报错,例如:
s="hello" print(eval(str(s)))输出结果为:
Traceback (most recent call last):
File "C:UsersmengmaDesktopdemo.py", line 2, in
print(eval(str(s)))
File "
NameError: name 'hello' is not defined
s="hello" print(repr(s)) print(str(s))输出结果为:
'hello'
hello
注意,在编写代码时,一般会使 repr() 数来生成动态的字符串,再传入到 eval() 或 exec() 函数内,实现动态执行代码的功能。



