在CherryPy中,我可以在出现问题时raise cherrypy.HTTPError(code, message)
,或者return string
当问题全部解决时。{/ p>
我现在正在寻找的是,我如何创建一个类,以便我可以这样做:
class MyOwnResultClass:
foo = None
def __init__(self, foo):
self.foo = foo
def __str__(self):
return "Result: {f}".format(f=self.foo)
class cherrypystuff(object):
@cherrypy.expose
def index(self):
return MyOwnResultClass("f")
此操作失败并显示错误
TypeError:迭代非序列
我必须使用return str(MyOwnResultClass("f")
。
答案 0 :(得分:1)
这就是我想出来的。
from functools import wraps
import cherrypy
RESPONSE_TEMPLATE = 'Result: {res}'
def resultify(original_handler):
@wraps(original_handler)
def wrapped_handler(*args, **kwargs):
orig_resp = original_handler()
return RESPONSE_TEMPLATE.format(res=orig_resp)
return wrapped_handler
class CherryPyStuff(object):
@cherrypy.expose
@resultify
def index(self):
return 'f'
答案 1 :(得分:0)
我在错误消息中潜入了一点,显然,CherryPy想要一个可迭代对象作为返回类型,如果不是字符串。
因此,解决方案非常简单:使MyOwnResultClass
可迭代:
class MyOwnResultClass:
foo = None
def __init__(self, foo):
self.foo = foo
def __iter__(self):
yield "Result: {f}".format(f=self.foo)
在看到@webKnjaZ建议的谈话后更新,我重构了这个:
def MyOwnResult(foo):
yield "Result: {f}".format(f=foo)
答案 2 :(得分:-1)
尝试将__str__方法重命名为__repr__ ...我认为这应该适用于您尝试的内容。