python中的通用方法,用于尝试将值解析为所选类型



是否有一种方法可以让我将给定的值解析为所选的类型?

它可能是一个以类似方式工作的库。

如果没有方法,我如何创建类似的东西?

示例(解析list[str]到list[int]):

# could be a value of ANY type
value: list[str] = ['1', '2', '3']
# can be any other type
parse_to_type = list[int] 
# makes best effort to parse
parsed_value = universal_parser(value, parse_to_type) 
# parses or raises error 
# parsed_value = [1, 2, 3] 

请记住,我不想要一个神奇的函数,与Pydantic lib相比,具有解析能力的函数就足够了。Pydantic本身能够从列表[str]解析到列表[int],但我无法在代码中找到它是如何对任何类型进行解析的。

我知道我可以使用int(value)float(value)(一般是annotation(value))。但是对于复杂的嵌套类型,不起作用如:list[int],dict[str, str | int].

我发现我可以动态地创建Pydantic模型,我可以使用它来利用它的解析能力。

下面是一个简单的实现

import typing
from pydantic import create_model

def universal_parser(value: typing.Any, annotation: type):
"""
the return type is an instance of the annotation (don't know how to write it)
"""
Parser = create_model('Parser', parsed=(annotation, ...))
model = Parser(parsed=value)
return model.parsed

print(universal_parser(['1', '2', '3'], list[int]))

这解决了我的问题,因为Pydantic的解析能力正是我想要的。尽管这让我想知道Pydantic是如何解析这些东西的。请记住,这不仅对list[int]有效,而是Pydantic能够解析的任何类型,如datetime, float, dict等等。

相关内容

最新更新