好吧,我有一个像这样的文件。在
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来帮助我们打开文件的代码。我需要打开文件,读取每一行,使每一行都成为一个元组,然后将其放入一个列表中。列表应该是最后一个数字除以中间的数字,然后这个值后跟宝石的名称(中间的数字是宝石的克拉数)。我的问题是我甚至不能让它从文件中列出一个列表。这就是我试图打开它,但没有成功。在
^{pr2}$实际上,当我在def knapsack()下将它改为一个简单的printstatement时,它将打印类似于2+2的简单语句,但当我试图创建一个列表时,它会给我一个except错误。这是我第一次上编程课,所以如果能深入了解这一点,我将不胜感激。在
还有一些评论:
{em1>也被称为“不加修饰的异常”,因为它被指定为一个异常。您应该指定您希望看到的异常类型,并且只处理这些异常;如果您捕获了所有异常,并且发生了完全意外的失败(即
ComputerOnFireError
!)你永远不会知道的。首选使用
with
打开文件,因为这样可以确保文件始终正确关闭。以文本模式打开文件时,可以逐行迭代该文件;这是处理文件的最常用方法。
当你
.split()
一个字符串时,你会得到一个字符串列表。在对片段进行数学运算之前,必须使用int()
或float()
将它们从字符串转换为数值。希望有帮助。在
使用csv模块将行作为csv行读取。在
这将使您
^{pr2}$output_data
为:它是元组的列表。这就解决了从文件中生成列表的问题。现在,您应该:
output_data
作为参数传递给执行问题中提到的算术函数的单独函数。这个函数应该建立你的输出列表。关于您的代码的几点意见:
在main函数中定义文件句柄,但不传递它 到
knapsack
函数。但你在背包里提到过 不会给你想要的功能。所以你需要通过datafile
文件句柄作为knapsack
函数的参数。为此,请从以下位置替换main
方法中的这一行:到
{cd8>在Python中构建了一个
你应该:
dataFile
发送到knapsack
函数。except
更改为except IOError
,以避免捕捉到您希望看到的异常。关闭文件(考虑使用
with
打开文件,以避免显式关闭它如果您从一开始就使用
^{pr2}$except IOError
,则会看到以下错误:knapsack
不知道dataFile
是什么,因此出现错误。使用try..except
时,总是捕获特定于的异常。如果您不知道抛出了哪个错误,请在编写python解释器之前重新生成它(例如,尝试打开一个不存在的文件,注意抛出了IOError
)。在在}。在
knapsack
中,您需要从readline
更改为{您还应该考虑使用另一个答案中提到的^{} 模块来处理数据。在
相关问题 更多 >
编程相关推荐