This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ncoghlan
Recipients ncoghlan
Date 2012-06-25.11:45:36
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1340624737.77.0.388823323175.issue15180@psf.upfronthosting.co.za>
In-reply-to
Content
As seen in #4489, the traceback when mixing str and bytes in os.path.join is rather cryptic and hard to decipher if you've never encountered it before:

>>> import os.path
>>> os.path.join(b'', '')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.2/posixpath.py", line 78, in join
    if b.startswith(sep):
TypeError: startswith first arg must be str or a tuple of str, not bytes

>>> os.path.join('', b'')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.2/posixpath.py", line 78, in join
    if b.startswith(sep):
TypeError: startswith first arg must be bytes or a tuple of bytes, not str

While it's slightly less cryptic with a real source file (since you can at least see the os.path.join call), you have to have some how idea of how os.path.join works to realise that:
- type(sep) == type(args[0])
- b in args[1:]

The challenge is to generate a more user friendly error message without making the normal case of correct types any slower.
History
Date User Action Args
2012-06-25 11:45:37ncoghlansetrecipients: + ncoghlan
2012-06-25 11:45:37ncoghlansetmessageid: <1340624737.77.0.388823323175.issue15180@psf.upfronthosting.co.za>
2012-06-25 11:45:37ncoghlanlinkissue15180 messages
2012-06-25 11:45:36ncoghlancreate