好的,我有一个类似这样的文件。
panite,1,1800
ruby,2,100
diamond,0.75,900
emerald,3,250
amethyst,2,50
opal,1,300
sapphire,0.5,750
benitoite,1,2000
malachite,1,60
我们的老师给了我们使用 try/except 的代码来帮助我们打开文件。我需要打开文件并读取每一行并使每一行成为一个元组,然后将其放入列表中。该列表应该是最后一个数字除以中间的数字,然后该值后面跟着 gem 的名称(中间的数字是 gem 的克拉)。我遇到的问题是我什至无法让它从文件中生成列表。这就是我尝试打开它但没有成功的方法。
def main():
fileFound = False
while not fileFound:
fileName = input('File name containing jewel data: ')
try:
dataFile = open(fileName, "r")
fileFound = True
knapsack()
except:
print ('Could not find that file -- try again')
def knapsack():
list = dataFile.readline()
当我将其更改为 def knapsack() 下的简单 printstatement 时,我实际上取得了一些成功,它将打印一些简单的内容,例如 2+2,但是当我尝试创建一个列表时,它给了我 except 错误反而。这是我的第一堂编程课,因此我们将不胜感激。
def make_jewel(line):
name, carats, price = line.split(",")
return (float(price)/float(carats), name)
def main():
while True:
file_name = input('File name containing jewel data: ')
try:
with open(file_name) as inf:
data = [make_jewel(line) for line in inf]
break
except FileNotFoundError:
print('Could not find that file -- try again')
main()
以及一些评论:
except:
没有指定的异常类型,也称为“裸异常”,会令人不悦,因为它会捕获所有内容。您应该指定您期望看到的异常类型,并仅处理这些异常;如果您捕获了所有内容,并且出现了完全意外的失败(即 ComputerOnFireError
!),您将永远不会发现它。
首选使用 with
打开文件,因为它可以确保文件始终正确关闭。
当您以文本模式打开文件时,您可以逐行迭代它;这是处理文件的最常见方法。
当你.split()
一个字符串时,你会得到一个字符串列表。在对这些片段进行数学运算之前,您必须使用 int()
或 float()
将它们从字符串转换为数值。
希望有帮助。
我是一名优秀的程序员,十分优秀!