2

だから私はここで小さなアプリを作っています、そして私はtryブロックを持っています(ファイルがすでに存在するか、または作成されるべきかどうかを確認する必要があるため)。しかし...私のtryブロックは何らかの理由で繰り返されています!なぜこれが起こっているのか、私にはまったくわかり ません。助けてください?また、ファイルは正常に作成されます:)コード:

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!

明らかに、「Failed!」と表示されているので、tryブロックを実行していることを意味します...それが「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 に答える