在python上使用瓶子API会在将参数传递给函数时导致错误

时间:2015-05-16 19:33:07

标签: python bottle

我正在使用瓶库在python中编写API,但我遇到了问题。

当我运行以下代码时:

from bottle import route, run
apiArray = ["key0","key1","key2"]
@route('/<userApi>/')
def hello(userApi,apiArray):
    for item in apiArray:
        if item == userApi:
            return {True}
    return {False}
run(host='localhost', port=8080, debug=True)

当我运行该代码时,我收到以下错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 862, in _handle
    return route.call(**args)
  File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 1732, in wrapper
    rv = callback(*a, **ka)
TypeError: hello() takes exactly 2 arguments (1 given)

有人知道我做错了什么以及为什么我会收到这个错误?

1 个答案:

答案 0 :(得分:1)

如果已经声明了变量,为什么要传递apiArray?该函数接受两个变量,但该路由只接收一个变量。删除它,它应该工作。它在上下文中所以它不需要,但是如果你需要将它作为参数传递,你应该将它添加到路由中。否则,无论如何都不会设置它。

编辑:快速上下文教程

在线有很多资源可以理解Python中的变量上下文,所以我将使用示例给出一个简明的解释。

让我们从Python中的上下文解释开始。上下文(或范围)被定义为可供使用的变量或函数的“空间”。如果在给定的上下文中定义了变量,那么任何其他变量或函数可以在之后调用它。例如:

foo = 3
print foo

这将打印3。但是,这会失败

print foo
foo = 3

原因是虽然foo位于正确的上下文中,但尚未定义。

现在关于你的问题类似于“如果变量是全局的那么具有函数的意义”,Python上下文的第二部分是嵌套函数继承先前的上下文。所以如果我做了:

foo = 3
def print_foo():
    print foo

print_foo()

然后这将打印3,因为foo与函数位于相同的上下文中。你会在哪里使用它?

这扩展到更多的上下文嵌套。您可以在函数内部使用函数,但仍然可以在每个级别使用该级别及以下的变量。

我希望这有助于您更好地理解上下文,但是我过度简化并排除了许多重要细节,因此请花点时间阅读更多Python上下文教程。