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

代わりに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 に答える
1

問題は、フレームワークを使用しているため、内部で多くのことが発生することです。たとえば、ハンドラーの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 に答える
0

exit() はできません。発見したようにエラーが発生します。

有効な応答を作成する必要があります (空の場合もあります)。

http://webapp-improved.appspot.com/guide/response.htmlを読んでください。

また、何らかの HTTP エラーを返す必要がある場合でも、有効な応答を作成する必要があります。

于 2012-08-03T23:30:38.997 に答える