代码之家  ›  专栏  ›  技术社区  ›  Hyder Tom

python setattr未检查变量是否存在

  •  -2
  • Hyder Tom  · 技术社区  · 8 年前

    测试文件:

    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] 第1[1]行 告诉我地址。现在取决于 我必须填充变量。

    我面临的问题是:由于有数百个字段,有时我会错过拼写,例如:而不是 'my_home_phone' 'my_hoe_phne' test.my_hoe_phne = 4567

    """

    1 回复  |  直到 8 年前
        1
  •  5
  •   wbadart    8 年前

    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])