2

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

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!

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

4

3 回答 3

3

仅捕获您要处理的异常。请注意,打印“失败!” 并且退出处理异常。Python 无论如何都会这样做,而且它会为您提供关于发生了什么的大量信息,那么为什么要编写额外的代码来做更少的事情并隐藏问题的原因呢?

于 2012-04-29T01:30:31.603 回答
1

正如某人(刚刚删除他的帖子)之前指出的那样,您在用户函数中再次调用 user() ,这在这里很可能是错误的。

但是,我相信您的问题出在其他地方。我假设您希望“PISBN.dat”包含您查找帐户的数据库。但是,仅使用写权限打开文件将无济于事。这会导致您的循环“for line in PISBNdat:”根本不起作用,因此没有出现“Test”消息。

它让我认为“raw_input”失败并且异常被捕获。但正如kindall 指出的那样,您的代码存在一些设计缺陷。

于 2012-04-29T01:41:24.267 回答
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.
于 2012-04-29T04:23:13.127 回答