0

我创建了一个检查参数并决定运行其余代码的函数。我看起来像:

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 代码退出此请求?

4

3 回答 3

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):
  ...
于 2012-08-04T00:39:54.387 回答
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
于 2012-08-09T20:22:19.987 回答
0

您不能退出(),这将引发您发现的错误。

您需要构建一个有效的响应(它可能是空的)。

阅读http://webapp-improved.appspot.com/guide/response.html

如果你需要返回某种 HTTP 错误,你仍然需要构造一个有效的响应。

于 2012-08-03T23:30:38.997 回答