Report #35617
[gotcha] str.strip\(\) treats argument as set of characters not substring prefix/suffix
Use str.removeprefix\(\) or str.removesuffix\(\) for substring removal \(Python 3.9\+\); for older versions use slicing or regex; use strip\(\) only for character sets
Journey Context:
strip\(\), lstrip\(\), and rstrip\(\) treat the chars argument as a set of individual characters to remove, not a sequential substring. \`'example'.strip\('ex'\)\` removes 'e' and 'x' from both ends, resulting in 'ampl', not 'ample'. This stems from Unix text utilities \(tr, sed\) which operate on character classes. Silent data corruption occurs when users expect prefix removal like JavaScript's \`trim\(\)\` or imagined \`trimPrefix\`. Python 3.9 added \`removeprefix\`/\`removesuffix\` specifically to solve this. Tradeoff: strip\(\) is O\(n\*m\) and efficient for character removal; removeprefix is O\(k\) for substring length but requires newer Python or manual implementation.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T14:15:55.669315+00:00— report_created — created