为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中读取 YAML 配置文件

在 Python 中读取 YAML 配置文件

哆啦的时光机 2022-07-26 09:33:34
我正在尝试读取 YAML 配置文件并将其显示到终端。现在我想尝试检查 YAML 文件中的数据库(db)是否不是 Sqlite 或 Postgres,然后会引发异常,但我不知道如何。我试过但失败了,我做错了什么?我的test.yaml文件:database: dbopt:   host: bvcbvcbvcb.com   port: 5432   dbname: db1   user: username   password: 1234   client_encoding: utf-8   connect_timeout: 60   sslmode: nonequery:   select * from manufacturing_product我的代码:# process_yaml.py file`import yamlwith open(r'D:\Python\test.yaml') as file:    # The FullLoader parameter handles the conversion from YAML    # scalar values to Python the dictionary format    data = yaml.full_load(file)    for item, doc in data.items():        print(item, ":", doc)    def __init__(self, dbconf):        self._dbconf = dict(dbconf)        # checking for database type        dbtype = self.get_db_type()        if dbtype != 'sqlite' and dbtype != 'postgres':            raise exceptions.InvalidConfigError(                'E01001', 'Invalid database type, should be sqlite or postgres.')        else:            self.dbtype = dbtype我的程序仍然无法捕获异常。我的终端:database: dbopt:   host:    port: 5432   dbname: db1   user: username   password: 1234   client_encoding: utf-8   connect_timeout: 60   sslmode: nonequery:   select * from manufacturing_product
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

您的代码中缺少几部分,并且您的函数__init__永远不会被调用。您可能从一些带有类的示例中复制了它,该类也有一个方法get_db_type()。


class InvalidConfigError(Exception):

    pass


class DB:

    def __init__(self, dbconf):

        self._dbconf = dict(dbconf)


        # checking for database type

        dbtype = self.get_db_type()

        if dbtype != 'sqlite' and dbtype != 'postgres':

            raise InvalidConfigError(

                'E01001', 'Invalid database type, should be sqlite or postgres.')

        else:

            self.dbtype = dbtype


    def get_db_type(self):

        return self._dbconf['db']



with open('test.yaml') as file:

    data = yaml.full_load(file)


    for item, doc in data.items():

        print(item, ":", doc)



    db = DB(data)

哪个打印:


db : mysql

dbopt : {'host': 'bvcbvcbvcb.com', 'port': 5432, 'dbname': 'db1', 'user': 'username', 'password': '1234', 'client_encoding': 'utf-8', 'connect_timeout': 60, 'sslmode': 'none'}

query : select * from manufacturing_product

然后给出:


init raise InvalidConfigError( main .InvalidConfigError: ('E01001', '无效的数据库类型,应该是 sqlite 或 postgres。') 进程错误命令 '['ryd', '--force', 'so-60160957.ryd']'返回非零退出状态 1。


评论


# The FullLoader parameter handles the conversion from YAML

# scalar values to Python the dictionary format

是相当的标记。FullLoader 解析 YAML 并尝试将所有节点实例化为 Python 对象:YAML 映射到 dict,YAML 序列到列表,以及作为 Python 类型(字符串、整数、浮点数、布尔值等)的标量的 YAML 节点


查看完整回答
反对 回复 2022-07-26
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信