TypedDict无法声明名为“ not”的属性[duplicate]

问题描述 投票:2回答:1
我正在尝试为JSON Schema spec声明类型,因此我可以通过使用jsonschema Python包传递模式来验证类型。这是一个Dict,所以我正在使用Python 3.8 jsonschema。这是我到目前为止的内容:

TypedDict

但是,出现以下语法错误:

from typing import List, Dict, Any, TypedDict, Optional class JSONSchema(TypedDict): """A type for the JSONSchema spec""" type: str title: Optional[str] description: Optional[str] properties: Optional[Dict[str, JSONSchema]] required: Optional[List[str]] additionalProperties: Optional[bool] definitions: Optional[Dict[str, JSONSchema]] minLength: Optional[int] maxLength: Optional[int] allOf: Optional[List[JSONSchema]] anyOf: Optional[List[JSONSchema]] oneOf: Optional[List[JSONSchema]] not: Optional[JSONSchema]

这是因为  File "autocoder_ocr/schemas.py", line 39
    not: Optional[JSONSchema]
       ^
SyntaxError: invalid syntax
是语言关键字。但是,not 

是是有效的字典键。那么如何在类型定义中声明它呢?

我正在使用Python 3.8.2
python python-typing
1个回答
1
投票
嘿,您可以使用此样式,它将使您不能将其用作键。

"not"

您的代码中的第二个错误是未在类主体中或以这种方式在分配的右侧定义JSONSchema。最终,您也许可以编写类似from typing import List, Dict, Any, TypedDict, Optional
JSONSchema = TypedDict(
    "JSONSchema",
    {
        "type": str,
        "title": Optional[str],
        "description": Optional[str],
        "properties": Optional[Dict[str, JSONSchema]],
        "required": Optional[List[str]],
        "additionalProperties": Optional[bool],
        "definitions": Optional[Dict[str, JSONSchema]],
        "minLength": Optional[int],
        "maxLength": Optional[int],
        "allOf": Optional[List[JSONSchema]],
        "anyOf": Optional[List[JSONSchema]],
        "oneOf": Optional[List[JSONSchema]],
        "not": Optional[JSONSchema],
    },
)
的东西,但未实现。

当前不支持递归或循环类型定义。这是github问题:Optional["JSONSchema"],您也许可以在附近的某个地方找到工作。

© www.soinside.com 2019 - 2024. All rights reserved.