0

我是编程新手,目前正在尝试解决错误处理。但我一直遇到同样的问题。当我发现错误时,我想再次重新运行脚本。问题是,如果你在第一个错误之后输入了一个好的输入,它仍然认为它是一个错误的输入。请帮帮我。

def new_user_name()
    print "Choose a Username"
    username = input_str()

    try: 
        data = lite.connect(database)
        dat = data.cursor()
        dat.execute("INSERT INTO Users('User_Name') VALUES(?)", username);
        dat.rollback()
        return username
    except: 
        print "The username %s is already in use" % username
        time.sleep(2)
        new_user_name()

有人可以帮助我,或者链接一个关于错误处理的好教程吗?我会帮上大忙

4

3 回答 3

0

Python有一个很棒的官方文档,链接如下:

v 2.7 http://docs.python.org/2/tutorial/errors.html v 3.3 http://docs.python.org/3.3/tutorial/errors.html

请注意,您绝不能except:在没有 Exception 类的情况下使用,这是一种不好的做法。

于 2013-02-24T20:24:27.230 回答
0

dat.rollback()(如果这是一个有效的语法,没有检查但看起来很接近)应该在 except 部分而不是在 try 部分。

请注意,如果您在函数外部初始化数据库连接(这样您不必在每次函数调用时都这样做)或至少在 try 部分之外初始化数据库连接,您应该会更好。

于 2013-02-24T20:28:02.530 回答
0
dat.execute("INSERT INTO Users('User_Name') VALUES(?)", username);

这条线是问题所在。第二个参数应该是一个元组,而不是一个字符串,所以它引发了一个ValueError. 因为您要捕获所有错误,而不仅仅是sqlite3.IntegrityError(如果您尝试插入重复的主键会引发错误),您将始终处于except块中。

except如果可以避免,切勿使用包罗万象的块。

于 2013-02-24T20:29:33.000 回答