鱼C论坛

 找回密码
 立即注册
查看: 1402|回复: 11

[已解决]关于exec函数

[复制链接]
发表于 2020-3-4 17:05:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我是Python新手,想用exec函数同时创建多个tkinter里面的entry控件,可是却显示‘’name 'entry00' is not defined’
代码如下:
        for x in range(0,9):
                for y in range(0,9):
                    exec('entry'+repr(x)+repr(y)+' = tkinter.Entry(answer,width=2)')
                    exec('entry'+repr(x)+repr(y)+'.grid(row=x,column=y)')

        ········
        ···················
        for x in range(0,9):
            for y in range(0,9):
                exec('original_sudoku[x][y] = entry'+repr(x)+repr(y)+'.get()')
最佳答案
2020-3-4 17:09:57
岑志健 发表于 2020-3-4 17:07
runfile('E:/Python/project/sudo.py', wdir='E:/Python/project')
Exception in Tkinter callback
Tra ...

exec是直接执行这行代码,而你在exec里面的所有参数都会被处理,最后剩下结果,
然后使用结果
你这行代码的结果就是entry00,而Python的内置BIF是没有entry00的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-4 17:06:30 | 显示全部楼层
把完整报错信息发上来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 17:07:53 | 显示全部楼层
zltzlt 发表于 2020-3-4 17:06
把完整报错信息发上来

runfile('E:/Python/project/sudo.py', wdir='E:/Python/project')
Exception in Tkinter callback
Traceback (most recent call last):
  File "E:\Python\anaconda\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "E:/Python/project/sudo.py", line 389, in solve
    exec('original_sudoku[x][y] = entry'+repr(x)+repr(y)+'.get()')
  File "<string>", line 1, in <module>
NameError: name 'entry00' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 17:09:23 | 显示全部楼层
zltzlt 发表于 2020-3-4 17:06
把完整报错信息发上来

如果我不同exec这个函数,一个一个entry00.get()是没问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 17:09:57 | 显示全部楼层    本楼为最佳答案   
岑志健 发表于 2020-3-4 17:07
runfile('E:/Python/project/sudo.py', wdir='E:/Python/project')
Exception in Tkinter callback
Tra ...

exec是直接执行这行代码,而你在exec里面的所有参数都会被处理,最后剩下结果,
然后使用结果
你这行代码的结果就是entry00,而Python的内置BIF是没有entry00的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 17:11:39 | 显示全部楼层
qiuyouzhi 发表于 2020-3-4 17:09
exec是直接执行这行代码,而你在exec里面的所有参数都会被处理,最后剩下结果,
然后使用结果
你这行代 ...

所以是不能放在等号右边吗,应该怎么解决呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 17:44:05 | 显示全部楼层
qiuyouzhi 发表于 2020-3-4 17:09
exec是直接执行这行代码,而你在exec里面的所有参数都会被处理,最后剩下结果,
然后使用结果
你这行代 ...

        for x in range(0,9):
            for y in range(0,9):
                string = 'original_sudoku['+repr(x)+']'+'['+repr(y)+']'+' = entry' +repr(x) +repr(y) +'.get()'
              # print(string)
                exec(string)
大佬,我这样子处理过后还是不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 17:45:13 | 显示全部楼层
岑志健 发表于 2020-3-4 17:44
for x in range(0,9):
            for y in range(0,9):
                string = 'original ...

你要实在不行就别用exec了
能告诉我你为啥要用exec吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 17:51:08 | 显示全部楼层
qiuyouzhi 发表于 2020-3-4 17:45
你要实在不行就别用exec了
能告诉我你为啥要用exec吗?

我想同时创建81个变量,然后对其操作,代码想简洁一点~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 17:52:22 | 显示全部楼层
岑志健 发表于 2020-3-4 17:51
我想同时创建81个变量,然后对其操作,代码想简洁一点~

你把你的需求说一下
我试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 18:12:04 | 显示全部楼层
qiuyouzhi 发表于 2020-3-4 17:52
你把你的需求说一下
我试试

大佬抱歉,刚在看官方文档~,
我想用81个tkinter里面的entry部件来组成一个9*9的数独,所以得创建超多个entry'部件,并且用到里面的方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 18:14:07 | 显示全部楼层
岑志健 发表于 2020-3-4 18:12
大佬抱歉,刚在看官方文档~,
我想用81个tkinter里面的entry部件来组成一个9*9的数独,所以得创建超多个 ...


我看官网文档说,好像是什么局部变量的问题,entry的创建是在外面的,entry.get()是在函数里面的~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表