python setattr 不检查变量是否存在
python setattr not checking if variable exists
测试文件:
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
之前,您可以快速检查一下属性是否存在于模块中:
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])
测试文件:
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
之前,您可以快速检查一下属性是否存在于模块中:
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])