我创建了一个检查参数并决定运行其余代码的函数。我看起来像:
def assert_something(a):
if a>3:
exit(0)
我尝试使用类似的东西:
class SomeHandler(webapp2.RequestHandler):
def get(self,parameter):
#check and if something wrong then quit
assert_something(parameter)
#otherwise do other things
问题是exit()
函数总是创建一个包含500个代码的响应。
如何修改此代码以便我可以使用200代码退出此请求?
答案 0 :(得分:1)
问题在于,由于您正在使用框架,因此很多事情都会发生在幕后,例如在您的一个处理程序返回标题并将其他信息发送到浏览器之后。但是当你退出时,你会中断正常流程,从而导致内部服务器错误。
你可以做的是让装饰者断言参数是有效的。请注意,如果参数无效,您仍应向用户提供有用的内容。
装饰者可能是这样的:
from functools import wraps
def assert_something(f):
@wraps(f)
def wrapper(*args, **kwds):
if args[1] > 3: #args[0] is self, args[1] is parameter. Better to use kwargs
return None
return f(*args, **kwds)
return wrapper
然后将其用作:
@assert_something
def get(self, parameter):
...
答案 1 :(得分:1)
您可以使用return代替:
def everything_ok(a):
return a <= 3
class SomeHandler(webapp2.RequestHandler):
def get(self,parameter):
if not everything_ok(parameter)
#if you want to return something
#self.response.out.write("")
return
#do something else
答案 2 :(得分:0)
你不能退出(),这会引发你发现的错误。
您需要构建一个有效的响应(它可能是空的)。
阅读http://webapp-improved.appspot.com/guide/response.html
如果您需要返回某种HTTP错误,您仍需要构建有效的响应。