我正在使用瓶库在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)
有人知道我做错了什么以及为什么我会收到这个错误?
答案 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上下文教程。