用Python实现开关:“null不可调用”
我已经阅读了一些关于在python中实现switch/case的其他答案,我正在尝试将其应用到我的代码中,但没有成功:用Python实现开关:“null不可调用”,python,switch-statement,callable,Python,Switch Statement,Callable,我已经阅读了一些关于在python中实现switch/case的其他答案,我正在尝试将其应用到我的代码中,但没有成功: f = open(prg) line = f.readline() splitting = line.split(" ", 1) options = {"PUSH": push, "POP": pop, "ADD": add, "SUB": sub, "MUL": mul, "DIV": div, "INPUT": inpt, "OUTPUT":
f = open(prg)
line = f.readline()
splitting = line.split(" ", 1)
options = {"PUSH": push, "POP": pop, "ADD": add, "SUB": sub,
"MUL": mul, "DIV": div, "INPUT": inpt, "OUTPUT": outp,
"EXIT": ext}
options[splitting[0]](splitting[1])
我将为字典中的每个元素实现一个函数
问题是IDE在选项[Spliting[0]]Spliting[1]上说:“null不可调用”
编辑:我尝试了几种从字典中调用函数的方法,发现了奇怪的行为:
此代码:
choice = "PUSH 1"
splitted = choice.split(" ", 1)
options = {"PUSH": push, "POP": pop, "ADD": add, "SUB": sub, "MUL": mul, "DIV": div, "INPUT": inpt, "OUTPUT": outp,
"EXIT": ext}
options["PUSH"]
是不正确的,因为最后一句话没有效果。
但是,如果我把它放在try/catch语句中,它就会消失,即使我这样做,它也会消失:
options.get("PUSH", lambda: None)()
即使我知道如何选择正确的函数,我如何将参数传递给它们?
我很困惑
(splitting[1])
这是你的问题
options[splitting[0]]
在“选项”dict中返回一个条目,然后使用拆分[1],注意您的使用,具体取决于您从“选项”返回的条目,您可能可以使用[]
试试这个:
splitting = ['PUSH', 'POP', 'DIR']
options = {"PUSH": 'push', "POP": 'pop', "ADD": 'add', "SUB": 'sub',
"MUL": 'mul', "DIV": 'div', "INPUT": 'inp', "OUTPUT": 'out',
"EXIT": 'ext', "DIR": {'A': 'something'}}
options[splitting[2]]
options[splitting[2]]['A']
假设字典的值是函数。如果是这样,您必须在调用中添加括号:
options["PUSH"]()`
对于参数处理,我建议您将整个拆分列表传递给函数,并在那里进行处理
def push(splitted_list):
param = splitted_list[1]
#do something....
options = {"PUSH": push, "POP": pop, "ADD": add, "SUB": sub, "MUL": mul, "DIV": div, "INPUT": inpt, "OUTPUT": outp,
"EXIT": ext}
choise = "PUSH 1"
splitted = choise.split(" ")
options[splitted[0]](splitted)
这将使用拆分列表调用push函数,并对调用中传递的参数执行某些操作。该错误意味着拆分[0]实际上不在字典中。能否在第一行显示文件的内容?请尝试打印拆分[0]的值。只有IDE显示问题?你执行代码了吗?因为当我试着穿过外壳时,它起作用了。嗨,谢谢大家。我已经解决了这个问题。问题是我还没有要测试的文件。我将尝试使用line=一些我将在文件中找到的东西,看看会发生什么。您好,谢谢您的回复,但这段代码没有满足我的需要。通过拆分[1],我希望在函数中传递参数。即使我不需要在字典中的键后调用函数,在代码中,键上的调用向我显示了一个错误:语句似乎没有效果。嗨,Daniel。我快疯了。我已经为Python2.7.8运行了PyCharm社区版3.4.1。语句选项[splitted[0]]splitted给出的错误null不可调用。您的代码和这个简单的测试。>>>def testn:print n>>>>test5>>>d={'test':test}>>d['test']5-->'NULL'不可调用,我现在要为此打开一个线程。@gargiulo2000,Daniel的答案,你的'test'对我和WingIDE都有效,所以看起来PyCharm有问题。