3

我需要能够获取传递给我的函数 make_choice 的所有参数。但在第 25 行(requesterverb)我收到运行时错误:

requester[verb](kwargs)
TypeError: doPUT() takes exactly 0 arguments (1 given)

我究竟做错了什么?

这是我的代码:

#switch using dictionary
def make_choice(verb, **kwargs):
    def doGET(**kwargs):
        print "Doing GET"
        for key in kwargs:
            print "another keyword arg: %s: %s" % (key, kwargs[key])

    def doPUT(**kwargs):
        print "Doing PUT"
        for key in kwargs:
            print "another keyword arg: %s: %s" % (key, kwargs[key])

    def doDELETE(**kwargs):
        print "Doing DELETE"  

    def doPOST(**kwargs):
        print "Doing POST"

    def doPATCH(**kwargs):
        print "Doing PATCH"  

    requester = { 'GET': doGET, 'PUT': doPUT }

    requester[verb](kwargs)


make_choice(verb='PUT',param1='param1',param2='param2',param3='param3')
print "done"
4

2 回答 2

3

**你之前忘记kwargs了:

requester[verb](**kwargs)
于 2013-08-01T15:52:28.317 回答
1

make_choice范围内,kwargs是一个包含您的paramX值和键的字典。所以在这个函数范围内,kwargs无非就是一个字典。

只需删除函数参数中的**之前,它就会起作用。kwargsdoXXX

于 2013-08-01T15:51:51.017 回答