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() 函数内,实现动态执行代码的功能。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算