我正在运行一些python代码并收到错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "multiline14.py", line 28, in getText
if encodinghex in process:
TypeError: argument of type 'function' is not iterable
我的def在下面。
def gui(item):
def default_encode(s):
pass
# map items from menu to commands
encodinghex = '.encode("hex")'
decodinghex = '.decode("hex")'
mapping = {"encode_b64": base64.encodestring,"encode_url": urllib.quote_plus,"encode_hex": encodinghex, "decode_b64": base64.decodestring, "decode_url": urllib.unquote_plus, "decode_hex": decodinghex}
process = mapping.get(item, default_encode)
def getText():
#clear bottom text field
bottomtext.delete(1.0, END)
#var equals whats in middle
var = middletext.get(1.0, 'end-1c')
#insert encoded var in bottom
if encodinghex in process:
var = '"%s"' % (var)
bottomtext.insert(INSERT, eval(var + process))
elif decodinghex in process:
var = '"%s"' % (var)
bottomtext.insert(INSERT, eval(var + process))
else:
bottomtext.insert(INSERT, process(var))
导致该错误的原因是什么?
答案 0 :(得分:1)
你所做的事情似乎没有任何意义。您有两个文本字符串,encodinghex和decodinghex,您正在使用eval
转换为要执行的代码。但是在你的mapping
词典中你还有各种各样的实际方法,你也试图传递给eval
- 这本身就必然会失败,但在此之前你的代码就是试图将现有的文本字符串添加到实际的函数值,这是不可能的。
答案 1 :(得分:1)
您在此处mapping
请求功能:
process = mapping.get(item, default_encode)
然后尝试在此迭代:
if encodinghex in process:
除非主题为in
,否则您无法使用Iterable
关键字。
您在此尝试实现的是实际看到 哪个功能,您对mapping.get()
的回复
if process == encodinghex:
请注意base64.encodestring, urllib.quote_plus, encodinghex, base64.decodestring, urllib.unquote_plus, decodinghex
都是函数
答案 2 :(得分:0)
从您的示例的最后一行判断,您在某处有一个名为process()
的函数。然而,您尝试访问它,就好像它是行if encodinghex in process
中的可迭代一样。要修复错误,请更改函数或iterable的名称。