Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 3, 2014 17:16:47

admiral
Зарегистрирован: 2013-12-23
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Отслеживание изменений в словаре

Чего тут непонятного?
Имеется словарь с типом dict, в нем хранится куча элементов с разными типами.
Вот когда строковый элемент меняется - выскакивает ошибка. Я так понимаю питон определяет равенство объектов по их айдишнику. У строки нет айдишника, вот и выскакивает исключение.



Win7 + Python3.3 + PyScripter

Офлайн

#2 Июнь 3, 2014 21:40:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Отслеживание изменений в словаре

admiral
Имеется словарь с типом dict, в нем хранится куча элементов с разными типами.
А, ну да, словарь у тебя может быть. Значит, там не строки, а другие объекты.

admiral
Я так понимаю питон определяет равенство объектов по их айдишнику.
Во-первых, не так он определяет:
>>> s1 = 'a' * 100
>>> s2 = 'a' * 100
>>> id(s1), id(s2)
(3075959968, 3075960096)
>>> s1 == s2
True
>>>

Во-вторых, у тебя там написано в сообщении об ошибке, в чём проблема.
Строка сравнивается не со строкой, а с каким-то другим объектом, у которого определён метод __eq__. Для сравнения вызывается этот метод, который ищет какие-то внутренности в передаваемом ему объекте (в данном случае в строке). Скорее всего, он ожидает получить такой же объект, как и он сам.

Что можешь сделать: вставь
print(type(flags[i]), type(FLAGS[i]))
перед сравнением. Когда покажет тип объекта, найди определение класса.



Отредактировано py.user.next (Июнь 3, 2014 21:40:59)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version