2016-11-07 42 views
0

私は、ユーザーがテキストファイルにsalesを入力し、プログラムがファイルを読み取り、各販売カテゴリの合計金額を出力するプログラムを作成しています。量がフロートに解析することができない場合はIOError間違ったファイル名とValueErrorを用:プログラムは2つの例外を持っている必要がありますPythonで印刷

Alice;Lodging;49.99;10/12/2016 
Bob;Dining;8.42;10/13/2016 
Charles;Lodging;55.76;10/14/2016 
David;Dining;19.95;10/15/2016 
Eve;Rental;105.99;10/16/2016 
Frank;Rental;raft;10/17/2016 

:ここでは、テキストファイルの例を示します。 ValueErrorでは、その行をスキップしてプログラムを続行する必要があります。ここで

は、これまでの私のコードです:

from collections import defaultdict 

my_dict = defaultdict(float) 
filename = str(input(("Sales file: "))) 
    try: 
    with open(filename) as f: 
    for line in f.readlines(): 
     _, key, val, _ = line.split(';') 
     try: 
      my_dict[key] += float(val) 
     except ValueError: 
      print ('The amount %s, cannot be converted to a float!', line.strip()) 
except IOError: 
    print ("No such file or directory:", filename) 
    sys.exit() 

私はそれを実行するたびに、私はこれを取得:

Sales file: sales.txt 
The amount %s, cannot be converted to a float! Frank;Rental;raft;10/17/2016 

私のコードが間違っていますか?

+2

その行の3番目のセクションにあるものを見てください。そこには番号はありません;単に「raft」と書かれています。 – user2357112

+0

ランダムなものは何ですか?テキストファイルの "raft"? – Douglas

+0

あなたのインデントも修正してください。あなたの 'try/except'ブロックが壊れています。 – roganjosh

答えて

0

コードに問題はありません。実際問題はあなたのファイルにあります。ファイルに最後の行の3番目のフィールドのフォーマットデータが正しくありません。したがって、値をfloatに変換するのに適していないため、stringをfloatに変換しようとすると例外が発生します。

from collections import defaultdict 

my_dict = defaultdict(float) 
filename = str(input(("Sales file: "))) 
try: 
    with open(filename) as f: 
     for line in f.readlines(): 
     _, key, val, _ = line.split(';') 
     try: 
      my_dict[key] += float(val) 
     except ValueError: 
      print ('The amount %s, cannot be converted to a float!' % val, line.strip()) 
except IOError: 
    print ("No such file or directory:", filename) 
    sys.exit() 
+0

値が溜まっているため、ValueError例外が表示されることがあります。私はまだ各カテゴリの合計金額を計算することができなければなりません。そこには「筏」があります。 –

+0

私はそうすることができると思います。 my_dictの値を表示して、値が入力されているかどうかを確認してください。 –

+0

さらにもう1つの質問ですが、my_dictの値を別々の行にどのように出力できますか?例:宿泊:\ n食事:\ nレンタル:\ n? –

2

実際に文字列をフォーマットするのを忘れました。試してみてください:

print ('The amount %s, cannot be converted to a float!' % val, line.strip()) 

% valに注意してください。

0

フランク、レンタル、ラフト、10/17/2016 "の" raft "はあなたのエラーの原因となります。 何か問題がある場合は