2017-12-13 13 views
-2

私はPythonの初心者です。私のコードが正しく動作していません。 私は、テキストファイル「hw.txt」と同じディレクトリにコードを置く私のプログラムは実行していません。テキストファイルを検出しません

TXTはこちらペーストビン:https://pastebin.com/vXuKeFCMプログラムは11個の数字の平均を取り、最低ドロップすることになっている

数。グレードの平均を印刷します。例外処理中。しかし、それはちょうどスキップし続け、例外ラインに直接行きます。ファイルは同じ場所にありますが。

#Welcome/Introduction Message 
print("This program will read all the grades from the hw.txt file.") 
print("Then the program wll calculate the final homework grade(average with the lowest grade dropped.") 
print() 

#TRY/ELSE/IF/STRUCTURE 
try: 
    file = open("hw.txt", "r") 
    i = 0 
    minGrade = 0 
    total = 0 
    for line in file: 
     if i == 0: 
      minGrade = int(line) 
     else: 
      if minGrade > int(line): 
       minGrade= int(line) 
     total = total + int(line) 
     i = i + 1 
    average = (total - minGrade)/(i-1) 
    print("average final home grade:", average) 
except: 
    print("File cannot open or be found. Try troubleshooting.") 
+3

問題が発生している場合は、 'try' /' except'文を削除して、どのような例外が発生しても完全なトレースバックを取得することをお勧めします。ファイルの検索には関係ありません。一般的には、あなたが予期せぬ例外をキャッチする可能性があるため、それ以外の方法で修正できるバグを隠してしまうので、すべてをキャッチする裸の 'except'ブロックを持つことは悪い考えです。 – Blckknght

+3

'except'で特定の例外を使用することに加えて、できるだけ' try'ブロックに小さなコードを入れてください。あなたのケースでは、実際には 'open'が成功したかどうかだけをチェックしているので、' try'の下にあるべきものです。 – kindall

+1

あなたのコードに例外を引き起こしているものがいくつかあります:数値でないものに 'int'を呼び出す(' ValueError'が出ます)。 'i'が1なら'(i-1) 'で割ります(' ZeroDivisionError'が得られます)。見つからないファイルは、それだけをキャッチする場合は、 'FileNotFoundError'を送出します。 – Blckknght

答えて

0

あなたがtryを削除する場合は、あなたが見ることができるようにint型の二重ではないので、84.5を正しく解析できないこのメッセージ

ValueError: invalid literal for int() with base 10: '84.5\n'

を取得します。浮動小数点数に変換する必要があります

また、特定の例外を除いてtry exceptを持つことは非常に邪悪です。期待しているものだけでなく、すべての例外を無音にします。

-1

あなたはこのエラーを取得している主な理由は、ため、ファイルあるではなく、ファイルの変数のために F を使用するのが一般的ですので、Pythonでのキーワードです。

さらに、ファイル変数を変更すると、int()にも問題があります。なぜint()を使って値を変換していますか?ラウンドアップまたはダウンしたいですか?丸めたくないと仮定して、単にfloat()を使って必要な値を取得することができます。

また、ファイルを閉じることを忘れないでください。ここで提案です:

#Welcome/Introduction Message 
print("This program will read all the grades from the hw.txt file.") 
print("Then the program wll calculate the final homework grade(average with the lowest grade dropped.") 
print() 

#TRY/ELSE/IF/STRUCTURE 
try: 
    f = open("hw.txt", "r") 
    i = 0 
    minGrade = 0 
    total = 0 
    for line in f: 
     if i == 0: 
      minGrade = float(line) 
     else: 
      if minGrade > float(line): 
       minGrade= float(line) 
     total = total + float(line) 
     i = i + 1 
    average = (total - minGrade)/(i-1) 
    print("average final home grade:", average) 
except: 
    print("File cannot open or be found. Try troubleshooting.") 
finally: 
    f.close() 
+0

'file'はPythonのキーワードではありません。これはPython 2の組み込みの名前です(組み込みの名前のようにエラーなく再割り当てできます)。しかし、Python 3では何も使用されていません。 – kindall

+0

これは修正です。しかし、Python 2で再割り当てすると、 'file not found'というエラーが出ました。二番目は 'f'に代入しました。全てが魅力的でした。 –

+0

これで問題は発生しません。 – kindall

0

私のコメントに展開するには、ここでの唯一のopentryブロックであるようにあなたのコードを再構築できるかです。 elseブロックを使用して、エラーが発生しなかった場合に実行するコードを指定していることに注意してください。

#Welcome/Introduction Message 
print("This program will read all the grades from the hw.txt file.") 
print("Then the program wll calculate the final homework grade(average with the lowest grade dropped.") 
print() 

#TRY/ELSE/IF/STRUCTURE 
try:     # try only to open the file 
    file = open("hw.txt", "r") 
except IOError:  # use a reasonably specific exception type 
    print("File cannot open or be found. Try troubleshooting.") 
else:     # if no error occurred 
    i = 0 
    minGrade = 0 
    total = 0 
    for line in file: 
     if i == 0: 
      minGrade = int(line) 
     else: 
      if minGrade > int(line): 
       minGrade= int(line) 
     total = total + int(line) 
     i = i + 1 
    average = (total - minGrade)/(i-1) 
    print("average final home grade:", average) 

これはすぐにあなたに(ボビーによって示されるようである)実際の問題を明らかにします。

関連する問題