Bov*_*ist 8 python decorator pycharm
from pydantic import BaseModel
class Request(BaseModel):
num: int
@validator("num")
@classmethod
def validate_num(cls, num: int) -> int:
return num
Run Code Online (Sandbox Code Playgroud)
对于上述代码,PyCharm 发出警告“此装饰器不会收到它可能期望的可调用对象;内置装饰器返回一个特殊对象”。我认为警告不明确,因此我希望得到一些帮助。
当我将上面的代码更改为:
from fastapi.exceptions import RequestValidationError
from pydantic import BaseModel, validator
from pydantic.error_wrappers import ErrorWrapper
class Request(BaseModel):
num: int
@classmethod
@validator("num")
def validate_num(cls, num: int) -> int:
if num < 0:
raise RequestValidationError([ErrorWrapper(ValueError("error"), ())])
return num
request = Request(num=-2)
Run Code Online (Sandbox Code Playgroud)
警告消失了,但代码在不应该执行的情况下执行时没有任何问题,这意味着验证由于某种原因被忽略。
小智 5
查看github 上的源代码,您会发现validator装饰器已经返回了一个classmethod.
def validator(
*fields: str,
mode: Literal['before', 'after', 'wrap', 'plain'] = 'after',
check_fields: bool | None = None,
sub_path: tuple[str | int, ...] | None = None,
allow_reuse: bool = False,
) -> Callable[[Callable[..., Any]], classmethod[Any]]:
Run Code Online (Sandbox Code Playgroud)
只需删除您的@classmethod装饰器即可!
| 归档时间: |
|
| 查看次数: |
2554 次 |
| 最近记录: |