【发布时间】:2020-05-09 12:02:51
【问题描述】:
如何将index() 传递给名为uppercase() 的装饰器函数。我希望从index() 传递的值大写。
我收到此错误:
500 Internal Server Error
The server encountered an unexpected condition which prevented it from fulfilling the request.
Traceback (most recent call last):
File "/home/user/.local/lib/python3.6/site-packages/cherrypy/_cprequest.py", line 638, in respond
self._do_respond(path_info)
File "/home/user/.local/lib/python3.6/site-packages/cherrypy/_cprequest.py", line 701, in _do_respond
self.hooks.run('before_finalize')
File "/home/user/.local/lib/python3.6/site-packages/cherrypy/_cprequest.py", line 95, in run
self.run_hooks(iter(sorted(self[point])))
File "/home/user/.local/lib/python3.6/site-packages/cherrypy/_cprequest.py", line 117, in run_hooks
hook()
File "/home/user/.local/lib/python3.6/site-packages/cherrypy/_cprequest.py", line 65, in __call__
return self.callback(**self.kwargs)
TypeError: uppercase() missing 1 required positional argument: 'func'
import cherrypy
from cherrypy import tools
@cherrypy.tools.register('before_finalize')
def uppercase(func):
def wrapper():
original_result = func()
modified_result = original_result.upper()
return modified_result
return wrapper
class HelloWorld(object):
@cherrypy.expose
@cherrypy.tools.uppercase()
def index(self):
return 'Hello!'
if __name__ == '__main__':
cherrypy.tools.uppercase = cherrypy.Tool('before_finalize', uppercase)
cherrypy.quickstart(HelloWorld())
【问题讨论】:
-
请将完整的错误回溯添加到您的问题中!
-
从
@cherrypy.tools.uppercase()中删除(),装饰器被隐式调用,其装饰的函数作为第一个参数。您在没有参数的情况下显式调用它,这就是为什么您会看到错误“缺少 1 个必需的位置参数”。 -
TypeError:“大写”工具不接受位置参数;你必须使用关键字参数。