2017-11-16 6 views
-1

私は入力フォームから返された数値をPythonで検証しようとしました。入力値は数でなければならず、0より大きいpythonでnumberを検証する方法は0より大きいですか?

私のスクリプトは、このようなものです:

hello.py

# -*- coding: utf-8 -*- 
from flask import * 

app = Flask(__name__) 


@app.route('/', methods=['GET','POST']) 
def checNumber(): 
    if request.method=='POST': 

     number = request.form['Number'] 


     try: 
      if int(number) < 0: 
       raise 'Number should be greater than 0' 
     except: 
       raise 'Please enter number only' 

    return render_template('hello.html') 

if __name__ == '__main__': 

    app.run(debug=True) 

hello.html

<form class="form-horizontal" action='' method='POST'> 
     <div class="form-group"> 
     <label for="KhmerName" class="col-sm-2 control-label">Number:</label> 
     <div class="col-sm-10"> 
      <input type="text" class="form-control" id="Number" name="Number" placeholder="Please enter number only"> 
     </div> 
     </div> 
     <div class="form-group"> 
     <div class="col-sm-offset-2 col-sm-10"> 
      <button type="submit" class="btn btn-default">Submit</button> 
     </div> 
     </div> 
    </form> 

送信フォームをクリックした後、入力された値が数字(アルファベットなど)でない場合は、'Please enter number only'。しかし、数字が負の場合、それは決して'Number should be greater than 0'を上げることはありませんが、pythonは数値ではないとみなして'Please enter number only'を呼びます。

負の値も数値だと思います。

どうすればこの問題を解決できますか?ありがとう。

+0

あなたは 'try'ブロックの前の数値の値が、実際には、あなたが入力した数値であることを確認したことがありますか? 'print'はチェックするのに役立つかもしれません。 – roelofs

+1

ちなみに、 '<0'は' == 0'をチェックしません。これは "0より大きい"ではありません。 –

+0

@roelofs、私が単にレイズしないと、正しく検証されます。 –

答えて

1
raise 'Number should be greater than 0' 

あなたはこの行は例外とchecNumber機能・ダンプが、try ... except ...ブロックでキャッチ例外を発生させることを期待しています。

はこれを試してみてください:

@app.route('/', methods=['GET', 'POST']) 
def checNumber(): 
    if request.method == 'POST': 

     number_str = request.form['Number'] 
     try: 
      number = float(number_str) 
     except ValueError: 
      number = None 

     if number is None: 
      raise ValueError('Please enter number only') 
     elif number <= 0: 
      raise ValueError('Number should be greater than 0') 
     else: 
      pass 

    return render_template('hello.html') 
+0

私の問題にその答え!大変ありがとうございましたMad Lee:D –

0

の代わりに:と

try: 
     if int(number) < 0: 
      raise 'Number should be greater than 0' 
    except: 
      raise 'Please enter number only' 

ゴー:

try: 
     if float(request.form['Number']) <= 0: 
      raise 'Number should be greater than 0' 
    finally: 
     raise 'Please enter number only' 

そして、それが解決しない場合は、 "INT(数)< 0" から例外が通じ上げ、原因を見てみましょう例外。

+0

@ cricket_007絶対に、それは最高です...私は答えを編集します。 – Miika

+0

入力(数字、負数、またはアルファベット)が何であれ、「数字のみ入力してください」と表示されました。ありがとう。 –

+0

@ HouyNarunとマスキングの試行構造をすべて削除した場合、どのような例外がありますか? – Miika

関連する問題