Я пытаюсь написать простой объект в python, который будет загружать настройки с помощью ConfigParser
, получить все элементы в качестве словаря, а затем установить их как атрибуты для объекта.Рекурсивная ошибка при представлении setattr в python
Это похоже на работу, если я не включает в себя метод __setattr__
. Я могу вызвать «settings.top_travel» и получить ответ. Однако, как только я попытаюсь поставить __setattr__
, я, кажется, получаю сообщение об ошибке.
Он выглядит довольно рекурсивным, поэтому я предполагаю, что Get
вызывает Set
и т. Д. В части атрибута set я хочу, чтобы он записывал обратно в файл конфигурации. Поэтому, когда изменяется один из атрибутов настроек, он сохраняется в файле, откуда он появился.
Ниже вы найдете код и текст ошибки.
import ConfigParser
class settingsFile(object):
def __init__(self):
"""
Reloads the configuration file and returns a dictionary with the
settings :
[config]
top_travel = 250
"""
# Create a configuration object and read in the file
configuration = ConfigParser.ConfigParser()
configuration.read('config/config.cfg')
# Return all the "config" section as a list and convert to a dictionary
self.configuration = dict(configuration.items("config"))
def refresh(self):
self.__init__()
def __getattr__(self, attr):
return self.configuration[attr]
def __setattr__(self, attr, value):
print attr, " is now ", value
# Do some clever storing with ConfigParser
if __name__ == "__main__":
settings = settingsFile()
print settings.top_travel
settings.top_travel = 600
print settings.top_travel
Ошибка:
Traceback (most recent call last):
File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 52, in <module>
settings = settingsFile()
File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 37, in __init__
self.configuration = dict(configuration.items("config"))
File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 47, in __setattr__
print self.configuration[attr], " is now ", value
File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 44, in __getattr__
return self.configuration[attr]
File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 44, in __getattr__
return self.configuration[attr]
......
RuntimeError: maximum recursion depth exceeded
Может быть, вы просто хотите http://www.voidspace.org.uk/python/configobj.html – 2010-11-26 15:58:14
Что конкретная ошибка? Например. ValueError и т. Д. – 2010-11-26 15:58:33