【未经个人同意不得以各种方式转载本文章,该文章仅发布于CSDN】
【本文章的地址为:【Python】用eval、exec、compile函数做一个伪交互式编程窗口】
闲的胃疼的我,明明各种大事有如天灾一样砸我头上我还不务正业搞这些没用的东西。
这东西单独用当然觉得很没用,甚至觉得没有一点意义,毕竟我还没做出成品。花了一晚上时间才做出来的伪交互式觉得自己好nb好nb能以假乱真,至于和真正的交互式有没有使用上的差别我也不好说毕竟我也不懂,这代码我是靠感觉一点一点去码出来的,(各种有如黑盒般的报错整的我头皮发麻
运行效果:
(算是以假乱真的程度了,但我还不知道这代码有没有问题毕竟是大概感觉没问题才发的
代码可以直接使用
#这脚本为啥没有出现惯用的“XJ_”式命名习惯呢?为啥没写出一个类出来呢?
#因为这代码只是我一点一点尝试然后码出来的一个阶段性成果罢了,
#如果在不知道逻辑关系、无法完成功能的情况下还硬着写类的话那只会烦中添乱,
#只有获得了明显的运行结果后才想着如何封装出自己想要的形状。
#这边的个人小建议:试完代码后不要急着投入使用要先封装起来至少封装成函数注明下功能参数返回值啥的要不然到时候一堆手尾(别名shi山)直接逼到你自暴自弃得想重开新项目(然后又继续堆粪?
text=""#待执行的字串
holdOn=False#判断是否多行输入
while(True):
text_input=input("..." if holdOn else ">>>")
text=text+text_input+'\n'
if(holdOn==False and len(text_input)):#如果当前是第一行输入,并且当前输入不为空
try:
code=compile(text,'','eval')#尝试作为eval进行编译
rst=eval(code)#执行代码
text=''#【执行后清空记录】
if(rst):#如果结果不空那就输出结果
print(rst)
except:
try:
code=compile(text,'','exec')#尝试作为exec进行编译【进行语法检查】
exec(code)#执行代码
text=''#执行后清空记录
except Exception as err:
if(str(err).count("unexpected EOF")):#如果只是EOF错误那么说明是多行输入,置holdOn为真
holdOn=True
continue
print(err)#输出错误
text=''#【清空记录】
elif(holdOn==True):#如果当前并不是第一行输入
if(len(text_input)==0):#如果当前输入为空
holdOn=False
try:
code=compile(text,'','exec')#尝试作为exec进行编译【进行语法检查】
if(holdOn):#如果holdOn为真,代表代码还没输入完毕
continue
exec(code)#执行代码
text=''#【执行后清空记录】
except Exception as err:
if(str(err).count("unexpected EOF") and holdOn):#如果是EOF错误并且holdOn为真那么就继续,否则就是输入的代码段有问题
continue
print(err)#输出错误
text=''#【清空记录】
holdOn=False
如果说这代码有多装b呢,好像真的没啥可以秀的,顶多就在桌面放着个py脚本双击下就能进交互式(而且还不知道靠不靠谱),让正在苦学py的学子们看了直呼nb,但估计会接着下一句“你这东西有啥用的?不就放了个py脚本在桌面双击一下就进交互式吗,我还不如Win+R运行cmd执行py还来得方便呢”