bpo-30427: eliminate redundant type checks in os.path.normcase() (GH-1712)
https://bugs.python.org/issue30427
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index b5e1d12..f3cfabf 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -46,16 +46,10 @@
Makes all characters lowercase and all slashes into backslashes."""
s = os.fspath(s)
- try:
- if isinstance(s, bytes):
- return s.replace(b'/', b'\\').lower()
- else:
- return s.replace('/', '\\').lower()
- except (TypeError, AttributeError):
- if not isinstance(s, (bytes, str)):
- raise TypeError("normcase() argument must be str or bytes, "
- "not %r" % s.__class__.__name__) from None
- raise
+ if isinstance(s, bytes):
+ return s.replace(b'/', b'\\').lower()
+ else:
+ return s.replace('/', '\\').lower()
# Return whether a path is absolute.
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 12ab2ea..21ce72f 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -51,11 +51,7 @@
def normcase(s):
"""Normalize case of pathname. Has no effect under Posix"""
- s = os.fspath(s)
- if not isinstance(s, (bytes, str)):
- raise TypeError("normcase() argument must be str or bytes, "
- "not '{}'".format(s.__class__.__name__))
- return s
+ return os.fspath(s)
# Return whether a path is absolute.
diff --git a/Misc/NEWS.d/next/Library/2019-03-28-21-17-08.bpo-30427.lxzvbw.rst b/Misc/NEWS.d/next/Library/2019-03-28-21-17-08.bpo-30427.lxzvbw.rst
new file mode 100644
index 0000000..80e7c4a
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-03-28-21-17-08.bpo-30427.lxzvbw.rst
@@ -0,0 +1,2 @@
+``os.path.normcase()`` relies on ``os.fspath()`` to check the type of its argument. Redundant checks have been removed from its ``posixpath.normcase()`` and ``ntpath.normcase()`` implementations.
+Patch by Wolfgang Maier.