/ / ValueError: errore letterale non valido durante il passaggio del valore intero dalla maschera alla funzione Javascript [chiuso] - javascript, python, jquery-mobile

ValueError: Errore letterale non valido quando si passa il valore intero dalla funzione form a Javascript [chiuso] - javascript, python, jquery-mobile

Sto provando a passare un Integer da un modulo a Javascript funzione. Ho ottenuto bene il valore usando parseInt() come questo:

var student_age= parseInt($("#age").val());

e quindi memorizzato come JSON in questo modo

"age": student_age

ma quando premo il pulsante di invio, ottengo un Internal server error. L'ho rintracciato nel mio codice Python fino alla riga in cui sto cercando di passare il valore dal modulo al server.

student_age = int(self.request.get("age"))

Questo è dove sto ottenendo il ValueError: Invalid literal for int() with base 10: "NaN"

Ho provato a cambiare "age": student_age a "age": str(student_age) senza fortuna.

Modifica: codice Python:

class StudentRegistrationHandler(webapp2.RequestHandler):
def post(self):
...
if student:
#do stuff
else:
student_age = int(self.request.get("age"))
...

risposte:

1 per risposta № 1

parseInt ti dà il numero o NaN se la stringa fornita non è un numero. NaN è l'abbreviazione di Not-A-Number. Python genera un ValueError se int ottiene una stringa che non è un numero. Hai due possibilità: controlla in Javascript se l'utente inserisce un numero e invia solo richieste corrette al server o controlla il codice python, se il parametro age è davvero un numero. Meglio fare entrambe le cose.


0 per risposta № 2

Dal messaggio di errore, sembra che tu stia cercando di convertire il file Stringa "NaN" ad numero intero utilizzando int (base 10) in Pitone. Questo non funzionerà perché Pitone non riconosce NaN.

In Python, va bene chiedere perdono

try:
student_age = int("NaN")
except:
student_age = -1 # impossible age but valid int fallback

Ora ho

student_age == -1

e nessuna eccezione sollevata


0 per risposta № 3

Alla fine ho scoperto cosa c'era che non andava nel mio codice. È stato un errore sciocco da parte mia. Ho anche avuto un'altra variabile dichiarata come:

var year = parseInt($("year").val());

ma ho dimenticato di aggiungere il # prima year. Poiché questa variabile è stata dichiarata prima del student_age variabile, ho pensato che l'errore riguardasse entrambi. Ho testato ciò che veniva memorizzato in queste variabili utilizzando console.log() e vide che l'età aveva un int e che l'anno era NaN.