eval() 没有关键字参数
eval() takes no keyword argument
代码:
import tkinter as tk
win = tk.Tk()
text = tk.Text(win, width = 50, height = 20, bg = 'black', fg = 'lightgreen', wrap = tk.WORD)
text.pack()
text.tag_configure('prompt', foreground = 'magenta')
text.tag_configure('output', foreground = 'yellow')
text.insert('end', '>>> ', 'prompt')
def on_return(*args):
cmd = text.get('prompt.last', 'end')
if cmd:
try:
output = str(eval(cmd, globals = {"__builtins__":None}))
except Exception as e:
output = str(e)
text.insert('end', '\n' + output, 'output')
text.insert('end', '\n>>> ' + output, 'prompt')
return 'break'
text.bind('<Return>', on_return)
win.mainloop()
为了获得此输出:eval() 不带关键字参数,只需在文本小部件上键入任何内容并按回车键。
我应该怎么做才能避免这种输出?
在您的代码中,您需要从传入字典的参数中删除 'globals ='。正确的行是:
output = str(eval(cmd, {"__builtins__":None}))
代码:
import tkinter as tk
win = tk.Tk()
text = tk.Text(win, width = 50, height = 20, bg = 'black', fg = 'lightgreen', wrap = tk.WORD)
text.pack()
text.tag_configure('prompt', foreground = 'magenta')
text.tag_configure('output', foreground = 'yellow')
text.insert('end', '>>> ', 'prompt')
def on_return(*args):
cmd = text.get('prompt.last', 'end')
if cmd:
try:
output = str(eval(cmd, globals = {"__builtins__":None}))
except Exception as e:
output = str(e)
text.insert('end', '\n' + output, 'output')
text.insert('end', '\n>>> ' + output, 'prompt')
return 'break'
text.bind('<Return>', on_return)
win.mainloop()
为了获得此输出:eval() 不带关键字参数,只需在文本小部件上键入任何内容并按回车键。
我应该怎么做才能避免这种输出?
在您的代码中,您需要从传入字典的参数中删除 'globals ='。正确的行是:
output = str(eval(cmd, {"__builtins__":None}))