我尝试访问元组值,但它说在尝试在 Python 中创建保存/加载方法时解包的值太多

Posted

技术标签:

【中文标题】我尝试访问元组值,但它说在尝试在 Python 中创建保存/加载方法时解包的值太多【英文标题】:I try to access the tuples values but it says it has too many values to unpack when trying to create a save/load method in Python 【发布时间】:2020-02-20 20:42:05 【问题描述】:

您好,抱歉,我是编程新手,需要帮助。我做了一个简单的数学测试,我希望能够保存分数,检查之前的最高分,如果更高,覆盖最高分。

我保存了“('k',1.67)”的.txt文件,并想分别访问名称和分数,但是当我尝试访问元组值时,它说它有太多的值需要解压.

我该如何解决这个问题?

**ValueError: too many values to unpack (expected 2)**

def overwrite(highest_score_details):
    with open("score.txt", 'w') as save:
        print(highest_score_details, file=save)


def get_score():
    with open("score.txt", 'r') as load:
        contents = load.readline()
        name_read, score_read = contents
        return contents


name = input("Enter your name: ")
start_time = my_timer()

for i in range(total_questions):
    make_question()

end_time = my_timer()
total_score = time_taken + wrong_answer_penalty

get_score()
highest_score_details = (name, total_score)
overwrite(highest_score_details)

【问题讨论】:

contents 是一个字符串:超过 2 个字符的序列。为什么get_score 尝试分配给name_readscore_read,如果它永远不会使用它们并返回contents 我以不同的方式绑定并忘记删除它,我也没有太多线索:P。当我打印 get_score 时,我可以获得元组数据,但如何访问第二个元素? 【参考方案1】:

听起来您正在尝试将字符串用作元组。 readline 返回一个字符串,它是一个字符的集合。为了将此字符串正确地转换为可以按您需要的方式使用的数据,您必须定义一种解析它的方法。

如果格式更简单,解析字符串会更容易。例如,如果您更改了存储分数的方式,使其只是k,1.67,那么您可以执行以下操作:

contents = load.readline() # read "k,1.67"
tokens = contents.split(",") # convert to ["k","1.67"]
name = tokens[0] # store "k" as the name
score = float(tokens[1]) # convert from the string "1.67" to the value 1.67
return (name, score) # pack the values into a tuple

【讨论】:

好的,谢谢!现在我已经完成了,我仍然无法访问函数之外的函数返回变量。我正在尝试“打印(get_score.name)”但没有运气:/你有什么建议可以从函数外部的返回中访问元组成员吗? @KevinNisbet 首先,get_score 是一个函数,所以它必须像get_score() 这样使用。其次,像这样的元组的内容是通过索引而不是名称访问的。因此,名称类似于get_score()[0],分数类似于get_score()[1]

以上是关于我尝试访问元组值,但它说在尝试在 Python 中创建保存/加载方法时解包的值太多的主要内容,如果未能解决你的问题,请参考以下文章

python - 未正确创建具有元组值的字典

如何在 django 模板的 forloop 中访问 If 语句中的元组值?

Python 元组tuple详解(超详细)

我正在尝试统一编写枪支脚本,但它说命名空间不能直接包含字段或方法等成员[重复]

为啥它说在 sql 查询中选择的列数错误?

将一组值映射到百分比