我正在重复尝试阻止问题

时间:2012-04-29 01:22:17

标签: python file io block repeat

所以我在这里制作了一个小应用程序,并且我尝试了块(因为我需要查看文件是否已存在或应该创建)。虽然......我的尝试块因某种原因而重复!我绝对 不知道为什么会这样。请帮忙? 此外,文件创建正常:) 代码:

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!

现在显然,因为它说“失败!”,这意味着它正在运行我的尝试块......因为那是唯一可以输出“失败!”的地方所以请在这里帮忙!

3 个答案:

答案 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.