Skip to content

bpo-33426: [doc] Behavior of os.path.join does not match documentation #28003

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions Doc/library/os.path.rst
Original file line number Diff line number Diff line change
Expand Up @@ -304,12 +304,13 @@ the :mod:`glob` module.)

.. function:: join(path, *paths)

Join one or more path components intelligently. The return value is the
concatenation of *path* and any members of *\*paths* with exactly one
directory separator following each non-empty part except the last, meaning
that the result will only end in a separator if the last part is empty. If
a component is an absolute path, all previous components are thrown away
and joining continues from the absolute path component.
Join one or more path components intelligently. The return value is the
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I can tell, the only change on this line is to change two spaces into one. That's not an inherently bad change, but it does make it rather more difficult to tell what actually changed in the wording of this paragraph. Please refrain from formatting changes like this when they're mixed in with other changes and are the only change on a line.

concatenation of path and any members of *\*paths* so that there is a
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

path is a parameter name, so it should keep its * markings:

Suggested change
concatenation of path and any members of *\*paths* so that there is a
concatenation of *path* and any members of *\*paths* so that there is a

directory separator (os.sep) following each part except the last.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The os.sep mention was specifically removed in bpo-43620; I don't think we should add it back. It could perhaps be "(platform-specific)" instead of "(os.sep)"?

An empty part is ignored unless it is the last part, in which case the result
will end in a separator. If a component is an absolute path, all previous
Comment on lines +308 to +311
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In looking into this, it looks like I'm actually the one who last made major changes to this section 7 years ago, and I now agree that I did leave it rather confusing. Oops :)

I think the following is a slightly better formulation; do you agree?

Suggested change
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. If a component is an absolute path, all previous
concatenation of *path* and any non-empty members of *\*paths* separated
by the platform's directory separator character. If the last member of *\*paths*
is empty, the result will end in a directory separator.
If a component is an absolute path, all previous

components are thrown away and joining continues from the absolute path
component.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It also looks like there are no changes to this last sentence, but it's harder to tell due to the reflowing of text. For ease of review, please leave reflowing for after the main change has been approved (or even leave it un-reflowed; Sphinx takes care of wrapping lines independently of how the source markup looks).


On Windows, the drive letter is not reset when an absolute path component
(e.g., ``r'\foo'``) is encountered. If a component contains a drive
Expand Down