使用raw_input检索字典数据

时间:2018-09-25 17:54:51

标签: python dictionary input

我正在尝试实现一个解决方案,其中我调用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。我该怎么做?

2 个答案:

答案 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")))