Python" Switch-Case"替代显示错误

时间:2015-03-06 06:33:47

标签: python python-2.7 dictionary switch-statement

我尝试在遵循一些代码后使用Cswitch-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}}

有人可以告诉我这里有什么问题吗?

3 个答案:

答案 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()