0

注意: 問題を解決しました

私はこの問題を発見したので、このコードを修正しようとして時間を無駄にしたくありませんでした。助けようとした人は誰でも賛成票を獲得します。

これが私が自分で問題を発見した問題であり、この間違いを犯したことは信じられないほど愚かだと感じています。

間違いは私の HTML コードにあります。誤って一連のフィールドに「Number」という名前を付けましたが、そうすると、Pythonスクリプトがプルする変数がありません。

こんな単純なことをしたなんて信じられない。努力してくれて本当に感謝しています。

また、ユーザーが間違って入力するのを防ぐために、とにかく検証を作成する必要があると思うので、それを提案していただければ幸いです。

迅速な対応に感謝します。

私は感謝の気持ちを伝える方法として、他の人を助けようとします!

こんにちは、テキスト入力を受け取り、いくつかのフォームのテキストを取得して整数に変換する、非常に基本的な基本的な Web アプリを作成しようとしています。これにより、いくつかの数式を実行し、結果を表示できます。

以下はスクリプトの大部分です(誤動作している重要な部分を見るには一番下にスキップしてください)

class MainPage(webapp.RequestHandler):
def get(self):
    self.response.out.write("""
      <html>
        <body>
          <form action="/battle" method="post">
            <div style="color:red"><p>
<label>Attacking Player Name
  <input type="text" name="attacker" id="attacker" />
</label>
</p>
<h3>Attacker's heros</h3>

<label># of Archers
<input type="number" name="number" id="archers1" min="0" max="50" />
</label>
<br>
<label># of Sword Dudes
<input type="number" name="knight1" id="# of Sword Dudes"min="0" max="50">
<br>
# of Ballistae
<input type="number" name="ballistae1" id="ballistae1"min="0" max="50">
</label>
<p><br />
<label>Defending Player Name
  <input type="text" name="defender" id="defending" />
</label>
</p>
<h3>Defender's heros</h3>
<p><label># of Archers
<input type="number" name="number" id="archers2" min="0" max="50" />
</label>
<br>
<label># of Sword Dudes
<input type="number" name="knight2" id="# of Sword Dudes"min="0" max="50">
<br>
# of Ballistae
<input type="number" name="ballistae2" id="ballistae1"min="0" max="50">
</label>
</p></div>

            <div><input type="submit" value="Battle!"></div>
          </form>
        </body>
      </html>""")


class battle(webapp.RequestHandler):
def post(self):
    announce=self.request.get('attacker')+" attacks "+self.request.get('defender')
    archers1c=int(cgi.escape(self.request.get('archers1')))
    knights1c=float(self.request.get('knights1'))
    ballistae1c=float(self.request.get('ballistae1'))
    armycount1=archers1+knights1+ballistae1
    armycount2=self.request.get('archers2')+self.request.get('knights2')+self.request.get('ballistae2')
    self.response.out.write('<html><body>You wrote:<pre>')
    self.response.out.write(str(announce))
    self.response.out.write(cgi.escape(self.request.get('player1name')))
    self.response.out.write('<br><br>')
    self.response.out.write(armycount1)
    self.response.out.write('</pre></body></html>')

さて、ここに私の問題があります:

    announce=self.request.get('attacker')+" attacks "+self.request.get('defender')
    archers1c=int(self.request.get('archers1'))
    knights1c=int(self.request.get('knights1'))
    ballistae1c=int(self.request.get('ballistae1'))
    armycount1=archers1+knights1+ballistae1

スクリプトのこの部分を実行すると、次の行でエラーが発生します。

    archers1c=int(self.request.get('archers1'))

私が受け取るエラーは

    ValueError: invalid literal for int() with base 10: ''

ユーザーのフォーム入力によって生成された文字列を数値に変換して、数式で使用できるようにするにはどうすればよいですか?

    armycount1=archers1+knights1+ballistae1

私はGoogle App Engineは初めてですが、Pythonは初めてではありません。これが本当に簡単に修正できることを願っています。

4

1 に答える 1

1

self.request.get('archers1')おそらくフォームフィールドが空であるため、空の文字列を返すため、コードは例外をスローしています。

私の提案は、フォーム フィールドを検証し、try/except ステートメントを使用して例外をキャッチすることです。

try:
    archers1c=int(self.request.get('archers1'))
except ValueError:
    # inform user of form validation error
于 2013-01-22T12:50:01.323 に答える