使用 exec() 和 eval() 函数时,一定要记住,它们的第一个参数是字符串,而字符串的内容一定要是可执行的代码。

以 eval() 函数为例,用代码演示常犯的错误:

s="hello"

print(eval(s))

输出结果为:

Traceback (most recent call last):

File "C:\Users\mengma\Desktop\demo.py", line 2, in

print(eval(s))

File "", line 1, in

NameError: name 'hello' is not defined

上面例子出错的地方在于,字符串的内容是 hello,而 hello 并不是可执行的代码(除非定义了一个变量叫作 hello)。

如果要将字符串 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

print(eval(str(s)))

File "", line 1, in

NameError: name 'hello' is not defined

为什么会有这个区别呢?同样对带字符串 s 的转化,使用 repr() 与 str() 得到的结果是有差别的,直接将二者的结果打印出来,就可以很明显地看出不同。见下面代码:

s="hello"

print(repr(s))

print(str(s))

输出结果为:

'hello'

hello

可见使用 repr() 返回的内容,输出后会在两边多一个单引号。

注意,在编写代码时,一般会使 repr() 数来生成动态的字符串,再传入到 eval() 或 exec() 函数内,实现动态执行代码的功能。

python exec函数和eval函数_Python exec()和eval()的使用注意事项相关推荐

  1. python eval函数_Python中eval与exec区别 | 萧小寒

    摘要 学过JavaScript的人都知道,在JS中有一个函数叫内置函数叫eval.eval函数可计算某个字符串,并执行其中的的JavaScript代码.正是因为这个特性,所以现在很多教材都不推荐使用这 ...

  2. eval函数linux,Python中的eval()、exec()及其相关函数

    刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数以及与它们相关的几个函数,如globals().locals()和compile() ...

  3. python中eval函数和int函数功能一样_python中eval与int的区别浅析

    python中eval和int的区别是什么?下面给大家介绍一下: 1.eval()函数 eval()能够以Python表达式的方式解析并执行字符串,并将返回结果输出.eval()函数将去掉字符串的两个 ...

  4. Python标准库 内置函数exec object globals locals

    本函数是执行一段语句或函数.参数object是一个字符串的语句或者一个编译过的语句的对象名称.参数globals是全局命名空间,用来指定执行语句时可以访问的全局命名空间:参数locals是局部命名空间 ...

  5. python eval 入门_Python学习笔记整理3之输入输出、python eval函数

    Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...

  6. python eval函数_Python基础元素语法总结

    一.程序的格式框架 1.缩进 缩进是指每行语句前的空白区域,用来表示Python程序间的包含和层次关系. 一般语句不需要缩进,顶行书写且不留空白. 当表示分支.循环.函数.类等含义,在if,while ...

  7. python里eval和input组合使用_python中eval()函数和input()函数用法解析

    今天给大家讲解Python中eval()函数和input()函数的用法,希望通过实例的讲解之后大家能对这两个函数有更加深刻的理解. 1.eval()函数 eval()能够以Python表达式的方式解析 ...

  8. eval函数python原理_python的eval函数作用

    eval(str)函数很强大,官方解释为:将字符串str当成有效的表达式来求值并返回计算结果.所以,结合math当成一个计算器很好用. eval()函数常见作用有: 1.计算字符串中有效的表达式,并返 ...

  9. python中的内置函数怎么学_python内部函数学习(九)

    python提供了很多的内置函数,这些内置的函数在某些情况下,可以起到很大的作用,而不需要专门去 写函数实现XX功能,直接使用内置函数就可以实现,下面分别来学习内置函数的使用和案例代码. 1.abs( ...

最新文章

  1. 有哪些新手程序员不知道的小技巧?
  2. qq音乐 android pad版,QQ音乐HD(com.tencent.qqmusicpad) - 4.12.1.4 - 应用 - 酷安
  3. PaddleDetection 个人测评
  4. 迅雷加载项会导致IE9浏览器崩溃
  5. php 如何单独刷新模板,反馈一个x-admin模板的问题,点击左侧栏不会刷新右侧栏当前页面的问题,并提供解决方案。...
  6. grub4dos初级教程-入门篇(Z)
  7. eclipse、EditPlus等编辑器选中列(块)的方法
  8. 机器学习(七):贝叶斯之新闻分类器
  9. 隔段时间网络就会变差,重启路由器恢复,这是为什么
  10. Linux中离线安装R语言程序包
  11. 昆明oracle考试点,Oracle认证考试知识点:修改sid的步骤
  12. Civil 3D菜单栏不在了怎么办
  13. 会议签到评分系统功能需求2020-5-9
  14. 戴尔DELLR740服务器修改bios启动项,安装redhat7.4
  15. Aspose.Words 设置背景颜色4种效果(当前段落设置背景颜色,所有段落文字设置背景颜色,当前单元格设置背景颜色,当前段落文字设置背景颜色)
  16. hadoop集群配置时hosts配置导致的错误(datanode节点只显示一个)
  17. 沉降观测曲线图 沉降观测汇总_沉降观测曲线图怎么画?
  18. 编写php自定义扩展
  19. Paper Game
  20. 高清画质,语音降噪,简单易用-QVE屏幕录制

热门文章

  1. springdata和mysql_Spring Boot使用Spring Data JPA访问MySQL数据库
  2. BZOJ 1059: [ZJOI2007]矩阵游戏
  3. Vue.directive注册指令
  4. 《打造七星级团队》观后感
  5. Ubuntu 14.04卸载安装失败的Mysql数据库,以及重新安装配置
  6. Eclipse中集成SVN
  7. [转载] 深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?
  8. [转载] python将int转为string_python – 在Pandas中将列名从int转换为string
  9. [转载] Python: fnmatch模块 (Unix B-Shell通配符的文件名匹配)
  10. Spring的@Transactional事务注意事项