为什么我不能在Pydantic中创建Httpurl的独立对象?

发布于 2025-02-06 16:27:24 字数 458 浏览 2 评论 0 原文

from pydantic import BaseModel, Field, HttpUrl
from typing import Optional

class TestClass(BaseModel):
    url:Optional[HttpUrl] = None

使用url =“ https://www.test.com创建对象testClass”工作。

在这里,导入的httpurl或basemodel是类。当我尝试创建httpurl对象独立时,它会在下面给出typeError。

from pydantic import HttpUrl

myurl = HttpUrl("https://www.test.com")
    

为什么不能像上面那样将其用于将字符串转换为HTTP对象。结果 错误如下:需要关键字,如果提供的话,则提供2个位置所需的2个位置3

from pydantic import BaseModel, Field, HttpUrl
from typing import Optional

class TestClass(BaseModel):
    url:Optional[HttpUrl] = None

Creating object TestClass with url="https://www.test.com" works.

Here the imported HttpUrl or BaseModel are class. When I try to create httpurl object standalone it gives typeerror e.g. below.

from pydantic import HttpUrl

myurl = HttpUrl("https://www.test.com")
    

Why it cannot be used to convert string to http object like above. It results
errors like: need keyword-only args if that is provided then 2 positional provided required 3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

掐死时间 2025-02-13 16:27:24

upd 2023-10-30(感谢 christoph H.
在Pydantic 2中,您应该使用typeadapter,因为PARSE_OBJ_AS被弃用。

ta = TypeAdapter(HttpUrl)  
url = ta.validate_strings("test.com")

只有pydantic 1.x )您可以使用parse_obj_as方法。这样,依赖性将更少:

from pydantic import parse_obj_as, HttpUrl  
url = parse_obj_as(HttpUrl, "https://www.test.com")

UPD 2023-10-30 (thanks Christoph H.)
In Pydantic 2 you should use a TypeAdapter, since parse_obj_as was deprecated.

ta = TypeAdapter(HttpUrl)  
url = ta.validate_strings("test.com")

(Only Pydantic 1.X) You can use parse_obj_as method. This way there will be fewer dependencies:

from pydantic import parse_obj_as, HttpUrl  
url = parse_obj_as(HttpUrl, "https://www.test.com")
ㄖ落Θ余辉 2025-02-13 16:27:24

pydantic类型仅在用作 basemodel 衍生物内的类变量时有效。

在引擎盖下,pydantic 的方法> anyurl 类,这对于外部使用不便。

也许 urllib 库将为您提供方便?

from urllib.parse import urlparse
myurl = urlparse("https://www.test.com")

pydantic types are valid only when used as a class variables inside BaseModel derivatives.

Under the hood, pydantic fires validate method of AnyUrl class which is inconvenient for external usage.

Maybe urllib library will come handy for you?

from urllib.parse import urlparse
myurl = urlparse("https://www.test.com")
神经大条 2025-02-13 16:27:24

在Pydantic版本2中,您应该使用以下代码,因为PARSE_OBJ_AS已弃用:

from pydantic import TypeAdapter, AnyHttpUrl

url = TypeAdapter(AnyHttpUrl).validate_python("https://www.test.com")

In Pydantic version 2 you should use the following code, because parse_obj_as is deprecated:

from pydantic import TypeAdapter, AnyHttpUrl

url = TypeAdapter(AnyHttpUrl).validate_python("https://www.test.com")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文