2016-05-25 1 views
0

Salut J'ai la fonction suivante pour obtenir sql à partir de mon modèle. La ligne de variable récupère la requête qui est entrée par l'utilisateur. Si l'utilisateur entre un sql invalide je reçois une erreur comme UnboundLocalError: local variable 'row' referenced before assignment (Parce que row n'est pas bacuse le sql est faux) Comment puis-je gérer cette erreur efficacement? Suis un peu nouveau pour django python. Peut m'aider sur ce gars? Merci d'avance.comment gérer une variable si elle n'en renvoie aucune

def DBQuery(sql): 
     c = MySQLdb.connect(host=HOST,user=USER,passwd=PASS,db=DB, cursorclass=MySQLdb.cursors.DictCursor) 
     cursor = c.cursor() 

     try: 
      cursor.execute(sql) 
      row = cursor.fetchall() 
     except Exception, e: 
      print "Error found!", e 

     cursor.close() 
     c.close() 
     return row 
+0

Eh bien, que voulez-vous * arriver * lorsque le SQL n'est pas valide? – ysth

Répondre

0

variables Declarete avant le retour, quelque chose comme:

def DBQuery(sql): 
    c = MySQLdb.connect(host=HOST,user=USER,passwd=PASS,db=DB, cursorclass=MySQLdb.cursors.DictCursor) 
    cursor = c.cursor() 
    row = None 
    try: 
     cursor.execute(sql) 
     row = cursor.fetchall() 
    except Exception, e: 
     print "Error found!", e 

    cursor.close() 
    c.close() 
    return row 
0
def DBQuery(sql): 
     c = MySQLdb.connect(host=HOST,user=USER,passwd=PASS,db=DB, cursorclass=MySQLdb.cursors.DictCursor) 
     cursor = c.cursor() 

     try: 
      cursor.execute(sql) 
      row = cursor.fetchall() 
     except Exception, e: 
      print "Error found!", e 
      row="None" 

     cursor.close() 
     c.close() 
     return row 
#then if the Exception ocure, the func will ret the string "None" 
+0

Renvoyer une chaîne au lieu d'un jeu de lignes est un très mauvais conseil ... – Selcuk

+0

rly, pourquoi? explaine – user5698387

0

Je changerais le code légèrement pour voir si cursor.execute() a tout retourné avant de faire un cursor.fetchall() .

rows_affected = cursor.execute(sql) 
if rows_affected == 0: 
    flag_an_error() 
else: 
    rows = ...... 

Vous pouvez gérer l'erreur en fonction de votre application.