我正试图将Integer
从表单传递到Javascript
函数。我用parseInt()
得到了值,像这样:
var student_age= parseInt($("#age").val());
然后存储为JSON,如下所示
"age": student_age
但是当我点击提交按钮,我得到一个Internal server error
。我将其跟踪到我的python代码,直到我试图将值从表单传递到服务器的行。
student_age = int(self.request.get('age'))
这就是我得到ValueError: Invalid literal for int() with base 10: 'NaN'
我试过改变"age": student_age
到"age": str(student_age)
没有运气
编辑Python代码:
class StudentRegistrationHandler(webapp2.RequestHandler):
def post(self):
...
if student:
#do stuff
else:
student_age = int(self.request.get('age'))
...
parseInt
如果提供的字符串不是数字,则给出数字或NaN。NaN是Not-A-Number的缩写。如果int
获取的字符串不是数字,Python将抛出ValueError。您有两种可能性:如果用户输入一个数字并且只向服务器发送正确的请求,则在Javascript中检查;如果age参数确实是一个数字,则在python代码中检查。
从错误消息来看,看起来您试图在Python中使用int
(基数10)将字符串 "NaN"
转换为整数。这是行不通的,因为Python不识别NaN。
在Python中,可以请求原谅
try:
student_age = int("NaN")
except:
student_age = -1 # impossible age but valid int fallback
现在student_age == -1
且未引发异常
我终于发现我的代码出了什么问题。我犯了一个愚蠢的错误。我还声明了另一个变量:
var year = parseInt($("year").val());
但是我忘了在year
之前添加#
。由于这个变量是在student_age
变量之前声明的,我认为错误影响了两者。我使用console.log()
测试了存储在这些变量中的内容,发现age是int, year是NaN。