所以我在这里制作了一个小应用程序,并且我尝试了块(因为我需要查看文件是否已存在或应该创建)。虽然......我的尝试块因某种原因而重复!我绝对 不知道为什么会这样。请帮忙? 此外,文件创建正常:) 代码:
import sys
import time
Version = "V0.1"
def user():
PISBNdat = open("PISBN.dat", "w")
PISBNdat.write(Version)
cuser = raw_input("Please enter account username!")
for line in PISBNdat:
print "Test"
if cuser in line:
print("User already exists! Try again!")
user()
def start():
print "Hello and welcome to Plaz's PISBN!"
print "Opening file..."
time.sleep(0.8)
try:
fin = open("PISBN.dat", "r")
print "Success!"
fin.close()
user()
except:
time.sleep(0.5)
print "Did not recognize/find file!"
time.sleep(0.1)
print "Creating file!"
time.sleep(0.5)
try:
fout = open("PISBN.dat", "w")
print "Success!"
fout.close()
user()
except:
print "Failed!"
exit()
start()
这是输出......:
Hello and welcome to Plaz's PISBN!
Opening file...
Did not recognize/find file!
Creating file!
Success!
Please enter account username! [This is what I entered: Plazmotech]
Failed!
现在显然,因为它说“失败!”,这意味着它正在运行我的尝试块......因为那是唯一可以输出“失败!”的地方所以请在这里帮忙!
答案 0 :(得分:3)
仅捕获您要处理的异常。请注意打印“失败!”退出是不处理异常。无论如何Python都会这样做,而且它会给你一些关于发生了什么的信息,那么为什么要编写额外的代码来减少并隐藏问题的原因呢?
答案 1 :(得分:1)
正如某人(刚刚删除了他的帖子)之前指出的那样,你在用户函数中再次调用user(),这可能是错误的。
然而,我相信你的问题在于其他地方。我假设您希望“PISBN.dat”包含一个数据库,您可以在其中查找帐户。但是,仅使用写入权限打开文件将无济于事。这导致你的循环“for PISBNdat中的行”根本不起作用,因此没有出现“Test”消息。这让我觉得“raw_input”失败了,并且抓住了异常。但有点指出,你的代码有一些设计缺陷。
答案 2 :(得分:0)
以下是start()
使用正确try...except
的示例:
def start():
print "Hello and welcome to Plaz's PISBN!"
print "Opening file..."
time.sleep(0.8)
try: #try bloc contains minimum amount of code to catch the pertinent error.
f = open("PISBN.dat", "r")
print "Success!"
except IOError: #Only catch the exceptions you want to handle. IOError, in this case
f = None
if not f:
print "Did not recognize/find file!"
print "Creating file!"
try:
f = open("PISBN.dat", "w")
print "Success!"
except IOError:
print "Failed!"
exit()
f.close()
user() #Call user() after the file has been tested and/or created.