Repository navigation
Closed
Labels
3.10 (EOL)end of lifeend of life3.11only security fixesonly security fixes3.9 (EOL)end of lifeend of lifedocsDocumentation in the Doc dirDocumentation in the Doc direasystdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
| BPO | 33426 |
|---|---|
| Nosy | @zware, @Rainald62, @DonnaDia |
| PRs |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee = None
closed_at = None
created_at = <Date 2018-05-04.18:39:06.316>
labels = ['easy', 'type-bug', '3.9', '3.10', '3.11', 'library', 'docs']
title = '[doc] Behavior of os.path.join does not match documentation'
updated_at = <Date 2021-09-02.08:33:07.143>
user = 'https://bugs.python.org/MichaelKlatt'bugs.python.org fields:
activity = <Date 2021-09-02.08:33:07.143>
actor = 'Rainald Koch'
assignee = 'docs@python'
closed = False
closed_date = None
closer = None
components = ['Documentation', 'Library (Lib)']
creation = <Date 2018-05-04.18:39:06.316>
creator = 'Michael Klatt'
dependencies = []
files = []
hgrepos = []
issue_num = 33426
keywords = ['patch', 'easy']
message_count = 5.0
messages = ['316184', '316194', '316223', '400436', '400903']
nosy_count = 6.0
nosy_names = ['SilentGhost', 'docs@python', 'zach.ware', 'Michael Klatt', 'Rainald Koch', 'DonnaDia']
pr_nums = ['28003']
priority = 'normal'
resolution = None
stage = 'patch review'
status = 'open'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue33426'
versions = ['Python 3.9', 'Python 3.10', 'Python 3.11']Metadata
Metadata
Assignees
Labels
3.10 (EOL)end of lifeend of life3.11only security fixesonly security fixes3.9 (EOL)end of lifeend of lifedocsDocumentation in the Doc dirDocumentation in the Doc direasystdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Activity
MichaelKlatt commentedon May 4, 2018
The behavior of os.path.join() regarding path separators does not match the documentation. This affects Python 3.6, and goes back to at least Python 2.7.
From the documenation:
"The return value is the concatenation of path and any members of *paths with exactly one directory separator (os.sep) following each non-empty part except the last, meaning that the result will only end in a separator if the last part is empty."
To me, this means that join will remove extraneous separators from the path, and that the only way to produce a trailing separator is to use join "" as the final path segment.
I expect
os.path.join("/abc//", "def/")to produce the string "/abc/def" based on the documentation, but what it actually produces is "abc//def/".SilentGhost commentedon May 5, 2018
your example actually produces '/abc//def/'.
However, I'm not sure where do you get the idea that it should clean up internal directory separators or do anything at all with the strings in paths. To me it reads like it's concatenating arguments skipping over the empty ones unless it's also the last one.
In any case, what would you propose to fix the language to describe the behaviour more clear?
MichaelKlatt commentedon May 5, 2018
For me, the ambiguity is due to the phrases "exactly one directory separator" and "the only way to produce a trailing separator".
I would suggest:
"The return value is the concatenation of path and any members of *paths so that there is a directory separator (os.sep) following each part except the last. An empty part is ignored unless it is the last part, in which case the result will end in a separator."
Or:
"The return value is the concatenation of path and any members of *paths such that there is guaranteed to be a directory separator (os.sep) following each part except the last. An empty part is ignored unless it is the last part, in which case the result will end in a separator."
[-]Behavior of os.path.join does not match documentation[/-][+][doc] Behavior of os.path.join does not match documentation[/+]DonnaDia commentedon Aug 27, 2021
Hi, I'm working on it. I will provide the pull request within 3 days.
Rainald62 commentedon Sep 2, 2021
Minimal changes that would largely reduce the likelihood of being misunderstood: Remove "intelligently" or replace "following" by "added after".
pythongh-77607: Improve accuracy of os.path.join docs
gh-77607: Improve accuracy of os.path.join docs (#101406)
pythongh-77607: Improve accuracy of os.path.join docs (pythonGH-101406)
pythongh-77607: Improve accuracy of os.path.join docs (pythonGH-101406)
gh-77607: Improve accuracy of os.path.join docs (GH-101406)
gh-77607: Improve accuracy of os.path.join docs (GH-101406)
pythongh-77607: Improve accuracy of os.path.join docs (python#101406)
Merge branch 'main' into inlinecomp2