我读过,但它没有告诉我我能做些什么。
我有一个调用私有模块的代码。目的是设置邮件帐户,为此,我创建mypost
模块中定义的MailAccounts()
对象。账户数量及其各自的详细信息在配置文件中描述。当应用程序启动时,它收集帐户信息并将其存储在字典中,字典的结构是:mypost
其中accounts = {service : { <MailAccounts Object at xxxxx> : {username : myusername, password : mypassword}}}
可以是“gmail”,其中service
是在MailAccounts
模块中定义的类。
到现在为止,一直都还不错。当我想设置帐户时,我需要调用它的方法:mypost
。我通过迭代字典的每个mailaccount对象并请求运行方法来完成此操作:
for service in accounts:
for account in accounts[service]:
account.setupAccount(account['username'], account['password'])
但正如您可能已经猜到的,python返回:
MailAccounts.setupAccount(username, password)
如果我手动创建相同的帐户,但是它工作:
account = MailAccount()
account.setupAccount('myusername', 'mypassword')
现在我相信这与我的
TypeError: 'MailAccount' object is not subscriptable
是字典键是不是有关?这使得它不可订阅(无论这意味着什么)?不,这到底意味着什么是不可订阅的?在这个例子中它意味着什么?当然,在这种情况下,我如何解决/绕过这个问题?
谢谢,
本杰明:)
最佳答案
解决这个问题的方法是正确使用词典。
for service in accounts:
for account, creds in accounts[service].iteritems():
account.setupAccount(creds['username'], creds['password'])