Skip to content
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

[doc] Behavior of os.path.join does not match documentation #77607

Closed
MichaelKlatt mannequin opened this issue May 4, 2018 · 5 comments
Closed

[doc] Behavior of os.path.join does not match documentation #77607

MichaelKlatt mannequin opened this issue May 4, 2018 · 5 comments
Labels
3.9 only security fixes 3.10 only security fixes 3.11 only security fixes docs Documentation in the Doc dir easy stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error

Comments

@MichaelKlatt
Copy link
Mannequin

MichaelKlatt mannequin commented May 4, 2018

BPO 33426
Nosy @zware, @Rainald62, @DonnaDia
PRs
  • bpo-33426: [doc] Behavior of os.path.join does not match documentation #28003
  • 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']

    @MichaelKlatt
    Copy link
    Mannequin Author

    MichaelKlatt mannequin commented 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/".

    @MichaelKlatt MichaelKlatt mannequin assigned docspython May 4, 2018
    @MichaelKlatt MichaelKlatt mannequin added docs Documentation in the Doc dir stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error labels May 4, 2018
    @SilentGhost
    Copy link
    Mannequin

    SilentGhost mannequin commented 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
    Copy link
    Mannequin Author

    MichaelKlatt mannequin commented 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."

    @iritkatriel iritkatriel added easy 3.9 only security fixes 3.10 only security fixes 3.11 only security fixes labels Aug 9, 2021
    @iritkatriel iritkatriel changed the title Behavior of os.path.join does not match documentation [doc] Behavior of os.path.join does not match documentation Aug 9, 2021
    @DonnaDia
    Copy link
    Mannequin

    DonnaDia mannequin commented Aug 27, 2021

    Hi, I'm working on it. I will provide the pull request within 3 days.

    @Rainald62
    Copy link
    Mannequin

    Rainald62 mannequin commented Sep 2, 2021

    Minimal changes that would largely reduce the likelihood of being misunderstood: Remove "intelligently" or replace "following" by "added after".

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    hauntsaninja added a commit to hauntsaninja/cpython that referenced this issue Jan 29, 2023
    This is a follow-up to python#100811.
    
    One of the changes in that PR isn't accurate in that
    `os.path.join('', '')` will not end in a separator.
    
    This reverts that change to the previous wording that used "only", but
    explicitly calls out the case where the last part ends in a separator,
    which is what caused confusin in python#77607 and motivated the change
    in python#100811.
    hauntsaninja added a commit that referenced this issue Jan 31, 2023
    This is a follow-up to #100811.
    
    One of the changes in that PR isn't accurate in that
    `os.path.join('', '')` will not end in a separator.
    
    This reverts that change to the previous wording that used "only", but
    explicitly calls out the case where the last part ends in a separator,
    which is what caused confusin in #77607 and motivated the change
    in #100811.
    miss-islington pushed a commit to miss-islington/cpython that referenced this issue Jan 31, 2023
    This is a follow-up to pythonGH-100811.
    
    One of the changes in that PR isn't accurate in that
    `os.path.join('', '')` will not end in a separator.
    
    This reverts that change to the previous wording that used "only", but
    explicitly calls out the case where the last part ends in a separator,
    which is what caused confusin in pythonGH-77607 and motivated the change
    in pythonGH-100811.
    (cherry picked from commit 909a674)
    
    Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
    miss-islington pushed a commit to miss-islington/cpython that referenced this issue Jan 31, 2023
    This is a follow-up to pythonGH-100811.
    
    One of the changes in that PR isn't accurate in that
    `os.path.join('', '')` will not end in a separator.
    
    This reverts that change to the previous wording that used "only", but
    explicitly calls out the case where the last part ends in a separator,
    which is what caused confusin in pythonGH-77607 and motivated the change
    in pythonGH-100811.
    (cherry picked from commit 909a674)
    
    Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
    miss-islington added a commit that referenced this issue Jan 31, 2023
    This is a follow-up to GH-100811.
    
    One of the changes in that PR isn't accurate in that
    `os.path.join('', '')` will not end in a separator.
    
    This reverts that change to the previous wording that used "only", but
    explicitly calls out the case where the last part ends in a separator,
    which is what caused confusin in GH-77607 and motivated the change
    in GH-100811.
    (cherry picked from commit 909a674)
    
    Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
    miss-islington added a commit that referenced this issue Jan 31, 2023
    This is a follow-up to GH-100811.
    
    One of the changes in that PR isn't accurate in that
    `os.path.join('', '')` will not end in a separator.
    
    This reverts that change to the previous wording that used "only", but
    explicitly calls out the case where the last part ends in a separator,
    which is what caused confusin in GH-77607 and motivated the change
    in GH-100811.
    (cherry picked from commit 909a674)
    
    Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
    mdboom pushed a commit to mdboom/cpython that referenced this issue Jan 31, 2023
    This is a follow-up to python#100811.
    
    One of the changes in that PR isn't accurate in that
    `os.path.join('', '')` will not end in a separator.
    
    This reverts that change to the previous wording that used "only", but
    explicitly calls out the case where the last part ends in a separator,
    which is what caused confusin in python#77607 and motivated the change
    in python#100811.
    carljm added a commit to carljm/cpython that referenced this issue Jan 31, 2023
    * main:
      pythongh-101440: fix json snippet error in logging-cookbook.rst (python#101439)
      pythongh-99276 - Updated Doc/faq/general.rst (python#101396)
      Add JOBS parameter to docs Makefile (python#101395)
      pythongh-98831: rewrite GET_LEN, GET_ITER, BEFORE_WITH and a few simple opcodes in the instruction definition DSL (python#101443)
      pythongh-77607: Improve accuracy of os.path.join docs (python#101406)
      Fixes typo in asyncio.TaskGroup context manager code example (python#101449)
      pythongh-98831: Clean up and add cache size static_assert to macro (python#101442)
      pythongh-99955: use SUCCESS/ERROR return values in optimizer and assembler. Use RETURN_IF_ERROR where appropriate. Fix a couple of bugs. (python#101412)
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.9 only security fixes 3.10 only security fixes 3.11 only security fixes docs Documentation in the Doc dir easy stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants