return innerhalb und ausserhalb einer while-Schleife
Verfasst: Freitag 22. Januar 2021, 15:00
Hallo
Ich habe ein Problem mit einer while-Schleife: Die Liste, die ich zuvor erstelle und dann innerhalb von while ergänze, kann anschliessend nicht ausserhalb von while verwendet werden. Hier der Code:
Vom Formular /form_question_add_mc kommen die Daten, in /question_add_mc_save werden sie per POST übernommen. Sicher vorhanden sind nur answer1, img1, correct1 und explication1, und die werden in die Liste answers geschrieben. In einer while-Schleife sollen, wenn vorhanden, answer2, img2, correct2 und explication2 usw. ergänzt werden. Das scheint einerseits zu klappen, denn innerhalb von while führt return str(answers) zur korrekten Anzeige der vollständigen Liste. Sobald ich aber return str(answers) nach while ausführe, erhalte ich einen Fehler:
Ich dachte, das Problem könnte mit globalen und lokalen Variablen zusammenhängen, aber da answers vor while definiert wird, sollte die Variable doch global sein, oder nicht? Kann mir jemand einen Tipp geben, was ich an meinem Ansatz ändern muss?
Gruss, inips
Ich habe ein Problem mit einer while-Schleife: Die Liste, die ich zuvor erstelle und dann innerhalb von while ergänze, kann anschliessend nicht ausserhalb von while verwendet werden. Hier der Code:
Code: Alles auswählen
#! C:\Python\Python39\python.exe -u
from flask import Flask, url_for, request, render_template
app = Flask(__name__)
@app.route("/form_question_add_mc")
def form_question_add_mc():
return render_template('form_question_add_mc.html') # Template einbinden
@app.route("/question_add_mc_save", methods=['POST']) # nur POST erlaubt
def question_add_mc_save():
status = request.form['status']
qtype = request.form['qtype']
complexity = request.form['complexity']
max_score = request.form['max_score']
qtext = request.form['qtext']
answer1 = request.form['answer1']
img1 = request.form['img1']
correct1 = request.form['correct1']
explication1 = request.form['explication1']
# Erste Antwort in zweidimensionales Array (Liste) answers schreiben
answers=[[answer1, img1, correct1, explication1]]
# Auf weitere Antworten prüfen
answer_nr=2
while answer_nr > 0: # Laufe bis zum Abbruch
# zum Überprüfen von POST-Variablen können request.data und request.form verwendet werden
if 'answer'+str(answer_nr) in request.form:
answers += [[request.form['answer'+str(answer_nr)], request.form['img'+str(answer_nr)], request.form['correct'+str(answer_nr)], request.form['explication'+str(answer_nr)]]]
# Das funktioniert:
#return str(answers)
answer_nr=answer_nr+1
else:
break
# ***********************************************************************************************************
# Die Antwort sollte z.B. so aussehen: [['Ja', 'pictures/img1.jpg', '1', 'Ist doch klar'], ['Manchmal', 'pictures/img2.jpg', '0', 'Nur, wenn man es nicht bemerkt'], ['Nein', 'pictures/img3.jpg', '1', 'Ich würde mal googeln...']]
# Das funktioniert nicht
return str(answers)
if __name__ == '__main__':
app.run(port=2000, debug=True, use_debugger=True, use_reloader=False)
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'correct3'
Ich dachte, das Problem könnte mit globalen und lokalen Variablen zusammenhängen, aber da answers vor while definiert wird, sollte die Variable doch global sein, oder nicht? Kann mir jemand einen Tipp geben, was ich an meinem Ansatz ändern muss?
Gruss, inips