0

嗨,我有以下功能可以从我的模板中获取 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
4

3 回答 3

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
于 2016-05-25T08:35:01.613 回答
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"
于 2016-05-25T08:35:08.637 回答
0

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

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

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

于 2016-05-25T08:37:19.870 回答