我试图为JSON模式规范声明一个类型,这样我就可以通过使用jsonschema包传递模式来验证类型。这是一个小问题,所以我使用Python3.8TypedDict。以下是我到目前为止所拥有的:
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是语言关键字。但是,"not"是一个有效的dict键。那么我如何在类型定义中声明它呢?
我正在使用Python 3.8.2
发布于 2020-05-22 18:07:29
嘿,你可以用这种风格,它会让你用不了钥匙。
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],
},
)代码中的第二个错误是,JSONSchema不是在类主体中定义的,也不是以这种方式在赋值的右侧定义的。最终,您可能能够编写类似于Optional["JSONSchema"]的东西,但这还没有实现。
当前不支持递归或循环类型定义。下面是github问题:https://github.com/python/mypy/issues/731,您可能会在那里的某个地方找到一份工作。
https://stackoverflow.com/questions/61960384
复制相似问题