我是编程的新手,目前正在尝试解决错误处理问题。 但我一直遇到同样的问题。当我发现错误时,我想再次重新运行脚本。问题是,如果你在第一个错误后输入一个好的输入,它仍然认为它是一个错误的输入。请帮帮我。
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()
有人可以帮助我,或者链接一个关于错误处理的好教程吗? 我会帮忙吗
答案 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
块。