字典 - ' str'对象不可调用

时间:2015-01-02 13:04:07

标签: python-3.x

我是Python新手并尝试创建一个用户界面,其中包含插入,删除和更新数据的选项。数据将在文本文件中处理。我想接受用户的选项并调用各自的功能来进行活动。我发现的一个替代方案是声明字典 整个代码是:

print("Select options from below")
dict_options = {'1' : 'Insert', 
                '2' : 'Update', 
                '3' : 'Delete',
                '4' : 'Display_number_of_records', 
                '5' : 'Display_all_records', 
                '6' : 'Exit'}



for key in dict_options.keys():
    value = dict_options.get(key)
    print(str(key) + ". " + value)


option = input("Enter an option : ")

while (option != '6'):
    value = dict_options.get(option)
    dict_options[option]()
option = input("Enter an option : ")


def Insert():
    print("Insert a record")
    return`enter code here`

当我执行时,它给了我一个错误:

TypeError: 'str' object is not callable at dict_options[option]()

2 个答案:

答案 0 :(得分:3)

字符串,例如dict_options[option],不可调用,但函数是。因此,将dict_options值设为函数对象: 变化

dict_options = {'1' : 'Insert', 
                '2' : 'Update', 
                '3' : 'Delete',
                '4' : 'Display_number_of_records', 
                '5' : 'Display_all_records', 
                '6' : 'Exit'}

dict_options = {'1' : Insert, 
                '2' : Update, 
                '3' : Delete,
                '4' : Display_number_of_records, 
                '5' : Display_all_records, 
                '6' : Exit}

请注意,您必须在定义dict_options之前定义函数。


此外,要打印该功能的名称,请将value更改为value.__name__

for key in dict_options.keys():
    value = dict_options.get(key)
    print(str(key) + ". " + value)

变为

for key in dict_options.keys():
    value = dict_options.get(key)
    print(str(key) + ". " + value.__name__)

答案 1 :(得分:1)

编辑:看起来unutbu打败了我。

这一行:

dict_options[option]()

评估这样的事情:

'Some String'()

你不能像这样调用一个字符串(试试吧!)。你必须编辑你的字典,所以里面的值是函数(或其他类型的可调用对象),而不是字符串。

编辑:

假设字典中的字符串值是可调用对象的名称(例如函数),您可以使用它exec的方式使其工作:

exec(dict_options[option] + '()')

但是,这是BAD BAD!不要这样做!