2016-05-25 2 views
0

Привет У меня есть следующая функция, чтобы получить sql из моего шаблона. строка переменной выбирает запрос, который вводится пользователем. Если пользователь вводит недопустимый sql am, получая ошибку как UnboundLocalError: local variable 'row' referenced before assignment (Потому что строка не имеет значения, sql неверна) Как я могу эффективно обрабатывать эту ошибку? Немного новичок в django python. Может помочь мне на этих парней? Заранее спасибо.как обрабатывать переменную, если она не возвращается

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

Ну, что вы хотите сделать, если SQL недействителен? – ysth

ответ

0

переменной задекларированная перед возвращением, что-то вроде:

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

Возвращение строки вместо набора строк - очень плохой совет ... – Selcuk

+0

rly, why? explaine – user5698387

0

Я бы немного изменить код, чтобы увидеть, если cursor.execute() вернула ничего, прежде чем делать cursor.fetchall() ,

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

Вы можете обработать эту ошибку в соответствии с вашими требованиями.

Смежные вопросы