如何解决以下代码中的 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中的错误