0

注意:我解决了这个问题

我不想让任何人浪费时间尝试修复此代码,因为我已经发现了这个问题。每个试图提供帮助的人都会得到支持。

这是我自己发现的问题,并且因为犯了这个错误而感到非常愚蠢。

错误出现在我的 HTML 代码中。我不小心将一堆字段命名为“数字”,这样做没有可供 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 回答