Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python实现开关:“null不可调用”_Python_Switch Statement_Callable - Fatal编程技术网

用Python实现开关:“null不可调用”

用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":

我已经阅读了一些关于在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": 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有问题。