微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sphinx 显示带有类型提示的本地 python 路径

如何解决Sphinx 显示带有类型提示的本地 python 路径

我使用 Sphinx 使用 sphinx-quickstart 以 html 格式自动生成文档。结果似乎错误地解析了 json 的类型提示

假设我有以下带有类型提示的 Python 函数

import json
def some_function(param1: str,param2: json) -> list:
    pass

函数生成以下 html 输出

 some_function(param1: str,param2: <module 'json' from 'path_to_conda/miniconda3/envs/ienw/lib/json/__init__.py'>) → list

我们现在看到 param2 的类型提示非常奇怪,我不希望文档中包含我的本地 Python 路径。

关于 conf.py 的一些细节(它主要遵循 sphinx-quickstart认配置):

extensions = [
    "rinoh.frontend.sphinx","sphinx.ext.autosummary",]
html_theme = "alabaster"

有谁知道为什么会发生这种情况以及我们如何从文档中隐藏我的本地路径?

解决方法

我会这样说

import json
def some_function(param1: str,param2: json) -> list:
    pass

确实违反了 PEP 484

类型提示可以是内置类(包括定义在 标准库或第三方扩展模块),抽象基 类、类型模块中可用的类型和用户定义的类 (包括那些在标准库或第三方库中定义的 模块)。

作为 json 之后的 import json 不是 class 可以证明如下:

import inspect
import json
print(inspect.isclass(json))  # False

您可能会选择使用 PEP 3107 代替,因为您可能会使用 Annotation 向用户传达期望的信息,简单的例子是:

def speed(distance: "meters",duration: "seconds") -> "m/s":
    return distance/duration
,

如果你想提示一个参数应该是一个 JSON 字符串,那么不要使用 json 模块作为提示,仅仅因为它被命名为“{{1} }”。您不会将json 模块作为参数传递给函数,因此无论如何类型检查都没有用。

JSON 是具有特定格式的字符串。因此,类型提示必须是 json,但您可以使用 type aliasNewType 来表达所需的逻辑:

str

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。