如何解决以下代码中的 ValueError?
Posted
技术标签:
【中文标题】如何解决以下代码中的 ValueError?【英文标题】:How to resolve ValueError in following code? 【发布时间】:2020-01-03 08:13:53 【问题描述】:投票已经开始了……由您来确保宣布正确的获胜者!
您获得了一个名为 nominees.csv 的 CSV 文件,其中包含获得奖项提名的各种电影的名称,以及应宣布为获奖者的人。该文件将如下所示:
title,director(s)
Schindler's List,Steven Spielberg
"O Brother, Where Art Thou?","Joel Coen, Ethan Coen"
2001: A Space Odyssey,Stanley Kubrick
"Sherlock, Jr.","Buster Keaton, Roscoe Arbuckle"
您应该编写一个读取 nominees.csv 的程序,询问获奖作品的名称,并打印出具体的祝贺信息。例如,使用上面的文件,你的程序应该像这样工作:
Winning title: O Brother, Where Art Thou?
Congratulations: Joel Coen, Ethan Coen
这是另一个例子,使用相同的文件:
Winning title: Schindler's List
Congratulations: Steven Spielberg
已经尝试提交和更改值,但第 10 行总是给出值错误,第 15 行也是如此。当应用新的被提名者列表时,它会给出错误并使我的代码失败。
def main():
film_director=[]
with open('nominees.csv','r') as read_file:
lines=read_file.readlines()
lines=lines[1:]
for line in lines:
if '"' in line:
if line[0]=='"':
index_second_quotes=line.index('"',1)
index_third_quotes=line.index('"',index_second_quotes+1)
title = line[:index_second_quotes].strip('\"')
directors=line[index_third_quotes:-1].strip('\"').strip()
else:
index_first_quotes = line.index('"')
index_second_quotes = line.index('"', index_first_quotes+1)
title = line[:index_first_quotes-1].strip('\"')
directors = line[index_first_quotes+1:-1].strip('\"').strip()
film_director.append([title,directors])
else:
tokens = line.split(',')
film_director.append([tokens[0].strip(),tokens[1].strip()])
title = input('Winning title: ')
for row in film_director:
if title.strip()==row[0]:
print('Congratulations:',row[1])
break
main()
给出的错误信息是:
Testing a new nominees file. Your submission raised an exception of type ValueError. This occurred on line 10 of program.py.
【问题讨论】:
这是作业题吗? 不是作业问题。提高 Python 技能,但在过去 3 小时内一直坚持这一技能。将aprpreciate帮助或解决方案。谢谢 顺便说一句,您的代码工作正常:repl.it/repls/FairBraveLaw 这是一个在线测试网站吗?它应该在 Python 2 还是 3 上运行? 假设在 python 3 上运行 【参考方案1】:上面的条件检查、拆分、连接的次数可以用正则表达式省略。您可以通过单个正则表达式和拆分来使用以下代码
import re
with open("nominees.csv") as cf:
lines = cf.readlines()
for line in lines[1:]:
reg_match = re.match(r'"([^""]*)","([^""]*)"$', line)
if reg_match:
win_title, director = reg_match.group(1), reg_match.group(2)
else:
win_title, director = line.split(",")
print("Winning title: %s" % win_title)
print("Congratulations: %s" % director.strip())
【讨论】:
什么是“re.match”。它告诉我名称 re 没有定义 import re,添加到顶部。需要导入包re,也就是python中的正则表达式包 现在它会打印所有这些。我只需要导演输入相应的获奖头衔。以上是关于如何解决以下代码中的 ValueError?的主要内容,如果未能解决你的问题,请参考以下文章
Python中的ValueError:解压缩的值太多[重复]
如何解决 Python 中的“ValueError:找到样本数量不一致的输入变量”问题
ValueError:未知标签类型:SVM 中的“连续”错误
如何解决此 ValueError:仅接受 2 个非关键字参数 sklearn python
如何在没有字符串解析的情况下解析 Python 中的 ValueError?
如何修复'ValueError:shapes(1,3)和(1,1)未对齐:3(dim 1)!= 1(dim 0)'numpy中的错误