我正在尝试实现一个解决方案,其中我调用displayPerson()来接受用户输入的ID号,并将为用户打印信息。我应该注意,我正在从Internet下载包含以下格式数据的csv文件:
id,姓名,生日
1,杰克·斯派洛,2000年9月20日
我的目标是从用户那里获得一个号码,该号码将查找并显示ID。我希望提示继续出现,并要求用户输入数字,直到输入负数或0退出。
page = downloadData(args.url)
persons = processData(page)
prompt= int(raw_input(" Enter ID of person you would like to search for: "))
displayPerson(prompt, persons)
displayPerson(prompt, persons)
当我尝试传递数字1-99的原始输入时,即使存在带有该数字的ID,我也会遇到“键盘错误”。例如,如果我只是简单地对displayPerson(10,person)进行硬编码,则该代码将运行,但是如果我raw_input 10,我将得到一个错误。为什么?
这是我的displayPerson函数:
def displayPerson(id, personDataDictionary):
"""
:param id:
:param personDataDictionary: Look at displayPerson in __name__ function. But I thought bday was pieces[2].
:return:
"""
print("id = {}, name = {}, birthday = {}".format(id, personDataDictionary[id][0],
personDataDictionary[id][1].strftime("%Y-%m-%d")))
按照编写的方式,我可以使用以前的代码段(您在此处看到的第一个代码段)调用该函数,并且如果我手动输入一个整数作为参数之一,但是该程序可以正常运行,但不允许我这样做取一个1-99的值而不会引发Key Error。我该怎么做?
答案 0 :(得分:0)
您将关键字错误放在哪个词典上?密钥是以整数或字符串形式输入的吗?这可能是您要研究的元素。我不是100%知道您要的是什么,但是是否是将var提示的值限制在1到99之间的方法:
prompt = 0
while prompt < 1 or prompt > 99:
prompt = int(raw_input(" Enter ID (1 - 99) of person you would like to search for: "))
do_something_with_key(prompt)
到退出该循环时,提示符的值将是您要查找的值(除非您要查找的是字符串)。
答案 1 :(得分:0)
我认为我建议您这样做。
原因:为什么因为字典中没有这样的键而抛出Key error
,所以您应该注意是否可以通过键而不是设置范围来获取值
def displayPerson(id, personDataDictionary):
"""
:param id:
:param personDataDictionary: Look at displayPerson in __name__ function. But I thought bday was pieces[2].
:return:
"""
per = personDataDictionary.get(id)
while not per:
prompt = int(raw_input(" Enter ID of person you would like to search for: "))
per = personDataDictionary.get(prompt)
print("id = {}, name = {}, birthday = {}".format(id, per[id][0],
per[id][1].strftime("%Y-%m-%d")))