Issue #23780: Improved error message in os.path.join() with single argument.
Idea by R. David Murray.
diff --git a/Lib/macpath.py b/Lib/macpath.py
index dbcf368..a90d105 100644
--- a/Lib/macpath.py
+++ b/Lib/macpath.py
@@ -53,6 +53,8 @@
     try:
         colon = _get_colon(s)
         path = s
+        if not p:
+            path[:0] + colon  #23780: Ensure compatible data type even if p is null.
         for t in p:
             if (not path) or isabs(t):
                 path = t
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index cfb4606..9cc5ca7 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -81,6 +81,8 @@
         seps = '\\/'
         colon = ':'
     try:
+        if not paths:
+            path[:0] + sep  #23780: Ensure compatible data type even if p is null.
         result_drive, result_path = splitdrive(path)
         for p in paths:
             p_drive, p_path = splitdrive(p)
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index ea51e11..09b8897 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -76,6 +76,8 @@
     sep = _get_sep(a)
     path = a
     try:
+        if not p:
+            path[:0] + sep  #23780: Ensure compatible data type even if p is null.
         for b in p:
             if b.startswith(sep):
                 path = b
diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py
index f2722bc..6ba55df 100644
--- a/Lib/test/test_genericpath.py
+++ b/Lib/test/test_genericpath.py
@@ -448,6 +448,10 @@
                 self.pathmodule.join(42, 'str')
             with self.assertRaisesRegex(TypeError, errmsg % 'int'):
                 self.pathmodule.join('str', 42)
+            with self.assertRaisesRegex(TypeError, errmsg % 'int'):
+                self.pathmodule.join(42)
+            with self.assertRaisesRegex(TypeError, errmsg % 'list'):
+                self.pathmodule.join([])
             with self.assertRaisesRegex(TypeError, errmsg % 'bytearray'):
                 self.pathmodule.join(bytearray(b'foo'), bytearray(b'bar'))