Форум сайта python.su
0
Здравствуйте.
Имеется программка, в которой я хочу отслеживать изменения флагов. Флаги хранятся в словаре, и имеют различные типы (строки, логические, словари и т.п.)
Написал вот такую функцию:
def search_changes_flags_always(): flags = copy.deepcopy(FLAGS) while True: try: for i in flags: if flags[i] != FLAGS[i]: logger.info("Изменения: " + str(i) + ": " + str(FLAGS[i])) flags[i] = FLAGS[i] except Exception: logger.info("Изменения - неизвестное исключение") log_to_file_exception() time.sleep(1)
if flags != FLAGS:Как можно правильно отслеживать изменения словаря, с учетом того, что там могут быть любые типы данных?
File “C:\Python33\lib\site-packages\selenium\webdriver\remote\webelement.py”, line 209, in __eq__
if self._id == element.id:
AttributeError: ‘str’ object has no attribute ‘id’
Отредактировано admiral (Июнь 1, 2014 22:08:17)
Офлайн
857
admiralФлаги - это переключатели, их значения логические. Их вообще можно хранить в одной целочисленной переменной (с помощью побитовых операций).
Флаги хранятся в словаре, и имеют различные типы (строки, логические, словари и т.п.)
admiralЭти объекты хранятся не в словаре.
Флаги хранятся в словаре
Офлайн
0
Ну пусть не флаги… неважно как я назвал этот словарь…
По сути, как мне отслеживать изменения в данном словаре и выводить их в лог?
Офлайн
568
admiralОтнаследоваться от стандартного словаря, переопределить методы __setitem__, __delitem__, update, pop, popitem, setdefault таким образом, чтобы при изменении словаря происходило некое событие за которым Вы будете следить в своей программе.
Как можно правильно отслеживать изменения словаря
Офлайн
1
Ошибка где-то в другом месте. Ни одна строка из трейса
if flags != FLAGS: File “C:\Python33\lib\site-packages\selenium\webdriver\remote\webelement.py”, line 209, in __eq__ if self._id == element.id: AttributeError: ‘str’ object has no attribute ‘id’
Офлайн
0
mgkСейчас запустил скрипт, вот что в логи написало:
Ошибка где-то в другом месте. Ни одна строка из трейса
2014-06-02 17:40:01,877 - INFO - Изменения - неизвестное исключение 2014-06-02 17:40:01,885 - ERROR - Traceback (most recent call last): File "D:\_Admiral\Dropbox\Polka\ver3\slovar.py", line 1192, in search_changes_flags_always if flags[i] != FLAGS[i]: File "C:\Python33\lib\site-packages\selenium\webdriver\remote\webelement.py", line 209, in __eq__ if self._id == element.id: AttributeError: 'str' object has no attribute 'id'
Офлайн
0
FishHookЯ с классами не очень пока…. обычную функцию никак нельзя сделать?
Отнаследоваться от стандартного словаря, переопределить методы __setitem__, __delitem__, update, pop, popitem, setdefault таким образом, чтобы при изменении словаря происходило некое событие за которым Вы будете следить в своей программе.
Офлайн
568
admiralИ что эта функция должна по твоему делать?
Я с классами не очень пока…. обычную функцию никак нельзя сделать?
Офлайн
0
FishHookФункция должна крутиться в потоке и, к примеру, раз в секунду отслеживать что изменилось в словаре за эту секунду. И выводить эти изменения в лог-файл.
И что эта функция должна по твоему делать?
Отредактировано admiral (Июнь 2, 2014 19:38:19)
Офлайн
857
admiralКогда говоришь про словарь в питоне, это означает тип dict.
неважно как я назвал этот словарь
admiralЭта строка никакого отношения к типу dict не имеет.if self._id == element.id:
admiralНепонятно, что ты называешь словарём.
По сути, как мне отслеживать изменения в данном словаре
mgkТам просто объект какой-то с переопределённым __eq__, и автор называет его “словарём”.
Ошибка где-то в другом месте. Ни одна строка из трейса
не совпадает с кодом из функции, которую ты привёл
Офлайн