【问题标题】:python setattr not checking if variable existspython setattr不检查变量是否存在
【发布时间】:2017-08-03 22:58:52
【问题描述】:

测试文件:

my_name = ''
my_home_address = ''
my_home_phone = ''

my_office_address = ''
my_office_phone = ''

这是另一个文件,我们称之为 test2

import test

line1 = ['address', 'home', 'tom', 'downtown', '12345']
line1 = ['address', 'office', 'tom', 'uptown', '4567']

my_map = { 'home': ['my_name', 'my_home_address', 'my_home_phone'],
           'office1': ['my_name', 'my_office_address', 'my_office_phone'],
           'office2': ['my_name', 'my_office_address', 'my_office_phone'],
           }

if line1[1] in my_map.keys():
    for position, c_name in enumerate(line1):
        setattr(test, my_map[line1[1]][pos], my_map[line1[1]][pos])

问题:我有一个测试文件,其中包含保存数据的所有字段,例如:my_name = '' my_home_address = '' my_home_phone = '' my_office_address = '' my_office_phone = '' 等...

我的输入是line1,它可以包含不同格式的信息,但line1[0]line1[1] 肯定存在。 line1[1] 告诉我它是什么地址。现在取决于line1[1],我将不得不填充变量。

我面临的问题:由于有数百个 Fields ,有时我会错过拼写,例如:而不是'my_home_phone' 我给它 'my_hoe_phne' ,但它在 test.my_hoe_phne = 4567 中加载信息 相反,我希望它通过错误说这个变量在测试文件中不存在。我该如何实现?

"""

【问题讨论】:

  • 可以在运行setattr之前进行hasattr检查

标签: python variables setattribute setattr


【解决方案1】:

在运行setattr之前,您可以快速检查一下该属性是否存在于模块中:

for pos, c_name in enumerate(line1):
    if not hasattr(test, my_map[line1[1]][pos]):
        raise AttributeError(
            'module `test` has no attribute %s' % my_map[line1[1]][pos])
    setattr(test, my_map[line1[1]][pos], my_map[line1[1]][pos])

【讨论】:

    猜你喜欢
    • 2014-09-08
    • 2016-12-28
    • 2017-12-15
    • 1970-01-01
    • 2013-11-13
    • 2014-06-23
    • 2017-08-05
    • 2010-10-25
    相关资源
    最近更新 更多