exit()函数创建500错误(Google App Engine和Python 2.7)

时间:2012-08-03 23:22:19

标签: google-app-engine python-2.7

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

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

3 个答案:

答案 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错误,您仍需要构建有效的响应。