2012-04-29 3 views
2

私はここに小さなアプリケーションを作っています。ファイルがすでに存在するかどうかを確認する必要があるため、ブロックを試してみました。しかし...私の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! 

、それは言っているので、それはその実行を意味し '失敗しました!'私のtryブロック... thatsは、それが 'Failed!'を出力できる唯一の場所だからです。だからここで助けてください!

+2

あなたは裸 '除き、使用しないでください:'、あなたが '例外IOErrorを除き、あなたが期待する例外、例えばを除く外必要があります:'私は信じています、この場合。 –

+0

あなたの 'try ... except'ブロックには、エラーを捕捉するのに必要な最小量のコードが含まれている必要があります。あなたの最初の 'try'ブロックは、例えば、' fin = open( "PISBN.dat"、 "r") 'という行だけを含むべきで、あなたのexceptブロックは単にファイルを作成すべきです。 'user()'は両方のブロックの外側で呼び出されるべきです。 –

答えて

3

処理したい例外のみをキャッチします。 "失敗!"終了はではなく、例外処理です。とにかくPythonはこれを行うつもりですが、何が起こったかについて情報を提供してくれるので、なぜ問題の原因を隠して隠す余分なコードを書いていますか?

1

誰か(自分の投稿を削除したばかりの人)が以前に指摘したように、ここで誤っている可能性が高いユーザ関数でuser()を再度呼び出します。

しかし、私はあなたの問題が他のどこかにあると信じています。 "PISBN.dat"にアカウントを検索するデータベースが含まれていることを前提としています。しかし、書き込み権限だけでファイルを開くことは、そこでは役に立ちません。これにより、 "PISBNdatの行:for"というループがまったく動作しないので、 "Test"というメッセージは表示されません。

私は "raw_input"が失敗し、例外がキャッチされたと思います。しかし、皆さんのコードにはいくつかの設計上の欠陥があることが指摘されています。

+0

ありがとう!コードを修正しよう! –

0

はここで正しいtry...except用法start()の例です:

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. 
関連する問題