pydoc.doc не может получить "os.path.sep"

Я проверяю справочную утилиту с os.path.sep в интерактивном режиме и зайти:

In [59]: help(os.path.sep)
Related help topics: lambda, or, and, not, in, is, BOOLEAN, COMPARISON,BITWISE, SHIFTING, BINARY, FORMATTING, POWER, UNARY, ATTRIBUTES,SUBSCRIPTS, SLICINGS, CALLS, TUPLES, LISTS, DICTIONARIES

Приоритет оператора


Следующая таблица суммирует приоритет оператора в Python, от самого низкого приоритета (наименее обязательный) до самого высокого приоритета (наиболее обязательный). Операторы в одном поле имеют одинаковый приоритет. Если синтаксис не указан явно, операторы являются двоичными. Операторы в той же группе блоков слева направо (кроме возведения в степень, которые группируются справа налево).

Тем не менее, когда я пытаюсь получить его с помощью pydoc

In [61]: with open("osPathSep_help.md", "w") as fout:
    ...:     pydoc.doc(os.path.sep, output=fout)
    ...:     
No Python documentation found for '/'.
Use help() to get the interactive help utility.
Use help(str) for help on the str class.

In [62]: os.stat("osPathSep_help.md").st_size
Out[62]: 0

Как получить тот же контент, что и цитата?

Следующая таблица суммирует приоритет оператора в Python, от самого низкого приоритета (наименьшего связывания) до самого высокого приоритета (большинство

1 ответ

Решение

Чтобы понять это поведение, вы должны проникнуть внутрь os.path Исходный код библиотеки. Если вы зайдете внутрь кода, вы найдете все эти переменные

curdir = '.'
pardir = '..'
extsep = '.'
sep = '\\'
pathsep = ';'
altsep = '/'
defpath = '.;C:\\bin'
devnull = 'nul'

Теперь то, что вы пытаетесь сделать, это доступ os.path.sep как функция, но, как вы можете видеть, это не функция, а переменная со значением, присвоенным как '\'

Так что os.path.sep всегда \ Вот почему, когда вы делаете help(os.path.sep) вы получаете результат как

Приоритет оператора

Следующая таблица суммирует приоритет оператора в Python, от самого низкого приоритета (наименее обязательный) до самого высокого приоритета (наиболее обязательный). Операторы в одном поле имеют одинаковый приоритет. Если синтаксис не указан явно, операторы являются двоичными. Операторы в той же группе блоков слева направо (кроме возведения в степень, которые группируются справа налево).

Который будет иметь тот же результат, что вы получите, когда вы будете делать

help('\\')

Теперь ваш следующий вопрос будет, как это работает с help?

так что если вы проверите исходный код справки, он упоминается

"""
Define the built-in 'help'.
This is a wrapper around pydoc.help (with a twist).
"""

Так что помощь внутренне используется pydoc.help

Так что если вы используете

pydoc.help('\\') или же pydoc.help(os.path.sep) вы получите желаемый результат.

Другие вопросы по тегам