循环添加数据到数据类

乘风 python 443

原文标题Add data in a loop to dataclass

我有这个功能。在尝试中,我想从 ini 文件的默认部分中获取密钥并将它们传递给数据类。 try 需要检查所有键是否存在,如果不存在 – except 会告诉您所有丢失的键。除了很棒,但我在尝试时遇到了麻烦。我不知道如何获取密钥并将它们传递到数据类中,因为我在 try 之上执行了一个 for 循环。 (我只需要将数据传递到数据类并返回该数据类,但循环使这变得困难)有什么想法或见解吗?谢谢,麻烦您了。

def do_ini():
    default_path = os.path.expanduser(config.CONFIG_INI_PATH)
    final_path = os.environ.get('INI_PATH', default_path)
    parser = ConfigParser()
    parser.read(final_path)
    ini = read_ini()
    if exists(final_path):
        keys = ("app", "source_path")
        for option in keys:
            try:
                reed = ini.get("default", option)
                #dataclass
                #config_data()
                return reed
            except NoOptionError:
                print(f'This key is missing: {option}')

原文链接:https://stackoverflow.com//questions/71522019/add-data-in-a-loop-to-dataclass

回复

我来回复
  • s0mbre的头像
    s0mbre 评论

    很简单:

    import os, dataclasses
    import configparser
    
    def do_ini():
        default_path = os.path.expanduser(config.CONFIG_INI_PATH)
        final_path = os.environ.get('INI_PATH', default_path)   
        if not os.path.exists(final_path):
            return None
        parser = configparser.ConfigParser()
        parser.read(final_path) # configparser.DEFAULTSECT
        values = None
        for section in (configparser.DEFAULTSECT, 'app', 'source_path'):
            try:
                values = parser.items(section)
                if values: break
            except Exception as err:
                print(err)
                continue
        if not values:
            # no section contains values!
            return None
        return dataclasses.make_dataclass('Data', [(k, type(v), dataclasses.field(default=v)) for k, v in values])
    
    2年前 0条评论