Python exec()和eval()的使用注意事项
使用 exec() 和 eval() 函数时,一定要记住,它们的第一个参数是字符串,而字符串的内容一定要是可执行的代码。
以 eval() 函数为例,用代码演示常犯的错误:
如果要将字符串 hello 通过 print 函数打印出来,可以写成如下的样子:
同理,也可以写成这样:
除了以上这种方式,还可以不去改变原有字符串 s 的写法,直接使用 repr() 函数来进行转化,也可以得到同样的效果。例如:
注意,虽然函数 eval() 与 str() 的返回值都是字符串。但是使用 str() 函数对 s 进行转化,程序同样会报错,例如:
以 eval() 函数为例,用代码演示常犯的错误:
s="hello" print(eval(s))输出结果为:
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\demo.py", line 2, in <module>
print(eval(s))
File "<string>", line 1, in <module>
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:\Users\mengma\Desktop\demo.py", line 2, in <module>
print(eval(str(s)))
File "<string>", line 1, in <module>
NameError: name 'hello' is not defined
s="hello" print(repr(s)) print(str(s))输出结果为:
'hello'
hello
注意,在编写代码时,一般会使 repr() 数来生成动态的字符串,再传入到 eval() 或 exec() 函数内,实现动态执行代码的功能。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频