我尝试在遵循一些代码后使用C
在switch-case
Python
中实施dictionary
case = {'1': "case_1", '2': "case_2"}
def case_1():
print "case 1"
def case_2():
print "case 2"
x = raw_input("Enter 1 or 2 :")
if x == '1' or x == '2':
print case[x]
case_1()
case[x]()
else:
print "Please enter 1 or 2 only"
。我有以下代码。
Enter 1 or 2 :1
case_1
case 1
Traceback (most recent call last):
File "test.py", line 17, in <module>
case[x]()
TypeError: 'str' object is not callable
我得到的输出和错误就像下面一样。
{{1}}
有人可以告诉我这里有什么问题吗?
答案 0 :(得分:3)
实际问题是您存储字符串值与键。执行case[x]
时,它只为您提供字符串值,并且您尝试将它们作为函数调用。这就是你得到的原因
TypeError: 'str' object is not callable
你可以通过将函数对象本身存储在字典中来修复,就像这样
def case_1():
print "case 1"
def case_2():
print "case 2"
case = {'1': case_1, '2': case_2}
现在,首先定义函数(这很重要,因为在定义之前不能使用函数对象),然后它们存储在字典对象中。所以,当代码
case[x]()
执行后,case[x]
将实际返回函数对象,您可以像试图那样直接调用它。
注意:这实际上是调用&#34;命令模式&#34;。您可以在this answer中了解有关它的更多信息。
还有另一种让你的程序正常工作的方法。但我不推荐它。 您可以通过从
globals()
字典获取函数对象来实际调用与字符串对应的函数对象,如globals()[case[x]]()
。
答案 1 :(得分:0)
请更改您的代码。
def case_1():
print "case 1"
def case_2():
print "case 2"
def run():
x = int(raw_input("Enter 1 or 2 :"))
print x
if x == 1:
case_1()
elif x== 2:
case_2()
else:
print "Please enter 1 or 2 only"
run()
答案 2 :(得分:0)
这里是字典代码:
def case_1():
print "case 1"
def case_2():
print "case 2"
def run():
dic={1:case_1,2:case_2}
x = int(raw_input("Enter 1 or 2 :"))
if x == 1 or x == 2:
dic[x]()
else:
print "Please enter 1 or 2 only"
run()