如果变量没有返回,如何处理变量

时间:2016-05-25 08:22:59

标签: python mysql django exception fetchall

您好我有以下函数从我的模板中获取sql。变量行正在获取用户输入的查询。如果用户输入了无效的sql,则会收到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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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"

答案 2 :(得分:0)

我会稍微更改代码,看看cursor.execute()在执行cursor.fetchall()之前是否返回了任何内容。

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

您可以根据应用程序处理错误。