我正在编写一个程序,用户在文本文件中输入销售,程序读取文件并打印出每个销售类别的总金额。以下是文本文件的示例:
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
程序必须有两个例外:错误文件名的IOError和无法将数量解析为浮点数的ValueError。对于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
我的代码出了什么问题?
答案 0 :(得分:2)
你忘了实际格式化字符串。试试这个:
print ('The amount %s, cannot be converted to a float!' % val, line.strip())
请注意% val
。
答案 1 :(得分:0)
您的代码没有问题。实际上你的文件中存在问题。您的文件包含最后一行中第三个字段的格式数据不正确。因此,当您尝试将字符串转换为float时,您将获得异常,因为该值不适合将其转换为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()
答案 2 :(得分:0)
回答这个问题感觉很愚蠢,但弗兰克的“筏子”;出租;筏子; 2016年10月17日“,这是导致你的错误的原因。 如果您遇到与此有关的其他问题,请说出来以便我们回答。为什么“筏”在那里?