2017-07-21 12 views
0

FlaskアプリケーションでGETパラメータを取得したいとします。私はそれが提出された場合、このパラメータが整数であることを確認したいと思います。パラメータをチェックするPythonicの方法は整数で、パラメータがない場合はデフォルト値を設定します

  • 提出されなかった場合は、デフォルト値を設定したいと思います。
  • それが提出されたが無効でいた場合、私はエラー

をスローしたいと思い、私は動作しますが、私には醜いとunpythonicようだ次のコードを思い付きました。これを行う最も無邪気な方法は何ですか?あなたがあなたのタイプをテストするrequest.args.get() methodを伝え、そしてデフォルト設定することができます

@app.route('/') 
def index(): 
    page = request.args.get('page') or 0 
    try: 
     page = int(page) 
    except: 
     return abort(500) 
+0

注 'という例外が発生しているので、あなたは、4行のブロック全体に別の関数を作ることができますabort() 'は例外を発生させ、' return'文自体には決して到達しません。 –

答えて

3

:型変換が失敗した場合

@app.route('/') 
def index(): 
    page = request.args.get('page', type=int, default=0) 

を、デフォルトが使用されています。多くのWeb環境では、多くの場合、というレスポンスが返されます(これはサーバエラーのために予約されていますが、有効なページ番号を提供していないのはクライアントエラーです)。

request.args.get()例外は発生しません。;それ以外のデフォルトが設定されていない場合は、代わりにNoneを返します。あなたは型変換上の例外を持っていなければならない場合、あなたはあなたのアプローチで立ち往生しているが、私が代わりに400 Bad Request error codeを返したい:

@app.route('/') 
def index(): 
    page_str = request.args.get('page', default=0) 
    try: 
     page = int(page_str) 
    except ValueError: 
     abort(400) 

abort(...)は例外、そこreturnを使用する必要はありませんが発生します。

def convert_or_400(value, type): 
    """Convert a value to the given type, or raise a 400 client error""" 
    try: 
     return type(value) 
    except ValueError: 
     abort(400) 

今すぐルートは次のようになります:

@app.route('/') 
def index(): 
    page = convert_or_400(request.args.get('page', default=0), int) 
-1
def index(): 
    page = input("enter the value") 
    try: 
     if (page != ""): 
      page = int(page) 
     else:    
      page = 0 
     print("Input value..",page) 
    except: 
     print("wrong value given.Input numeric value")  
index() 

簡単な方法

+0

いくつかの問題があります:質問にはFlaskというタグが付いているので、 'input()'はWebクライアントでは機能しません。元の "または0"を使用するアプローチは、空の文字列を明示的にテストし、 'else'ブロックを冗長化するよりもはるかに優れていました。 **はブランケット 'except'ステートメントを使用しないでください(OPは同じミスを犯しました)、キーボードの割り込み、メモリエラー、ジェネレータの終了もキャッチしています。これはポケモンではありません、あなたはそれらをすべて捕まえたくありません。 * ValueError例外をキャッチする*。 –

関連する問題