«TypeError: объект« type »не поддерживает назначение элементов» при попытке использовать словари - PullRequest
0 голосов
/ 24 июля 2011

Это очень простой сниппер сумматор / средство просмотра / удаления. Как я хочу, чтобы это работало, пользователь вводит имя (ключ словаря), а затем текстовое тело (значение ключа), чтобы добавить записи. Например, «Testsnippet», который является ключом для значения «Это фрагмент тестового текста».

Я не знаю, что с этим не так. Попытка использовать опцию «добавить / изменить» позволяет мне ввести текст фрагмента, который я хочу ввести в качестве значения ключа, но при этом возникает ошибка: TypeError: объект 'type' не поддерживает назначение элемента

Кроме того, попытка использовать опцию удаления просто дает мне опцию добавления / изменения, а не опцию удаления. Использование «view» работает нормально.

from sys import exit

clip_list = {'test':'whatever, this is a test'}

breaker = "--------------------"

while True:
    print "What do you want to do?"
    print "[view] [add/modify] [remove] [quit]"

    action = raw_input("> ")

    if action == "view":
        view_choice = raw_input("Enter snippet name to view OR type 'all' for the entire list:\n> ")
        if view_choice == 'all':
            print clip_list
            print breaker
        else:
            print clip_list[view_choice]
            print breaker

    elif action == "add" or "modify":
        snippet_name = raw_input("Enter snippet name:\n> ")
        snippet_input = raw_input("Text:\n> ")
        dict[str(snippet_name)] = str(snippet_input)
        print "Added!"

    elif action == "remove":
        snippet_name = raw_input("Enter snippet name to remove:\n> ")
        del dict[snippet_name]
        print "Deleted!"

    elif action == "quit":
        print "Goodbye!"
        exit(0)

    else:
        print "What? Please enter a valid command!"

Ответы [ 3 ]

1 голос
/ 24 июля 2011

Я думаю, вы имели в виду clip_list[str(snippet_name)] везде, где вы написали dict[str(snippet_name)].Но если все ключи и значения одинаковы, вам следует вместо этого использовать набор.

0 голосов
/ 24 июля 2011

С этим кодом вы обнаружите, что любая команда, кроме «view», выполняет действие добавления / изменения. Причина в том, что вы добавили или изменили условие:

    elif action == "add" or "modify":

Вы объединяете два условия с or, так что общее условие истинно, если выполняется одно из подусловий. Первое условие - action == "add", которое истинно, если action равно "add". Условие на другой стороне or хотя просто "modify". Любая непустая строка считается истинной в операторе if, поэтому это условие всегда истинно. Должно быть:

    elif action == "add" or action == "modify":
0 голосов
/ 24 июля 2011

Я согласен с Игнасио Васкесом-Абрамсом, вам следует использовать ваш глобальный dict clip_list. Кстати: ваше действие remove тоже должно измениться. del clip_list[snippet_name] или clip_list.pop(snippet_name)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...