Python错误处理问题(尝试,除外)

时间:2013-02-24 20:19:02

标签: python exception exception-handling error-handling try-catch

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

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()

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

3 个答案:

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

请注意,如果没有Exception类,你绝不能使用except:,这是一种不好的做法。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

dat.execute("INSERT INTO Users('User_Name') VALUES(?)", username);

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

如果可以避免,请不要使用全能except块。