Ich betreibe einen kleinen Webservice basierend auf Python-Kolben, wo ich eine kleine MySQL-Abfrage ausführen möchte. Wenn ich eine gültige Eingabe für meine SQL-Abfrage bekomme, funktioniert alles wie erwartet und ich bekomme den richtigen Wert zurück. Wenn jedoch der Wert nicht in der Datenbank gespeichert ist, erhalte ich eine TypeError
Fehlerbehandlung in Python-MySQL
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1478, in full_dispatch_request
response = self.make_response(rv)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1566, in make_response
raise ValueError('View function did not return a response')
ValueError: View function did not return a response
Ich habe versucht, in die Irre zu klopfen mir die Handhabung und den Code für mein Projekt zu verwenden, aber es scheint, als ob diese nicht richtig funktioniert.
#!/usr/bin/python
from flask import Flask, request
import MySQLdb
import json
app = Flask(__name__)
@app.route("/get_user", methods=["POST"])
def get_user():
data = json.loads(request.data)
email = data["email"]
sql = "SELECT userid FROM oc_preferences WHERE configkey='email' AND configvalue LIKE '" + email + "%';";
conn = MySQLdb.connect(host="localhost",
user="root",
passwd="ubuntu",
db="owncloud",
port=3306)
curs = conn.cursor()
try:
curs.execute(sql)
user = curs.fetchone()[0]
return user
except MySQLdb.Error, e:
try:
print "MySQL Error [%d]: %s" % (e.args[0], e.args[1])
return None
except IndexError:
print "MySQL Error: %s" % str(e)
return None
except TypeError, e:
print(e)
return None
except ValueError, e:
print(e)
return None
finally:
curs.close()
conn.close()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
Grundsätzlich mag ich nur einen Wert zurückgeben, wenn alles richtig funktioniert und ich möchte nichts zurück, wenn es nicht vorzugsweise mit einer Fehlermeldung auf meinem Server ist. Wie kann ich die Fehlerbehandlung richtig nutzen?
BEARBEITEN Aktualisierter aktueller Code + Fehlermeldung.
** außer TypeError, funktioniert e: ** nicht richtig? –
@ kuket15 versuchte das auch schon mal. Habe danach einen ** ValueError ** erhalten: D Und als ich ** außer ValueError, e: ** danach benutzt habe, habe ich noch einen ** ValueError ** erhalten. Ich habe meine Frage jetzt bearbeitet, so dass Sie meinen aktuellen Status sehen können –
Wenn es Flasche ist, die die Ausnahme abfängt, kann ValueError ('Ansicht-Funktion nicht zurückgeben ...') möglicherweise von keiner vorhandenen zurückgegeben werden. String im Gegenzug oder ein Ausnahme ValueError: Pass stattdessen zum Vergleich? Oder lies den Exception-Trap-Code in flask, wäre mein Vorschlag; um herauszufinden, wobt Ursache Kolben zu erhöhen. Darf deine Hände hier gebunden haben. –