[Python-Dev] os.path.join failure mode
Thomas Scrace
tom at scrace.org
Sat Feb 9 10:59:13 CET 2013
If a function (or other non-string object) is accidentally passed as an
argument to os.path.join() the result is an AttributeError:
In [3]: os.path.join(fn, "path")
> ---------------------------------------------------------------------------
> AttributeError Traceback (most recent call last)
> /home/tom/<ipython-input-3-44b097ceab04> in <module>()
> ----> 1 os.path.join(fn, "path")
> /usr/lib/python2.7/posixpath.pyc in join(a, *p)
> 66 if b.startswith('/'):
> 67 path = b
> ---> 68 elif path == '' or path.endswith('/'):
> 69 path += b
> 70 else:
> AttributeError: 'function' object has no attribute 'endswith'
It's relatively easy to run into this if you mean to pass the return value
of a function (fn()) as the argument but accidentally forget to append
parens (()) to the callable, thus passing the function itself instead.
Would it not be more helpful to raise a TypeError("Argument must be a
string") than the slightly more mysterious AttributeError?
It's not the most difficult error in the world to figure out, I admit, but
a TypeError just seems like the more correct thing to do here.
Thanks,
Tom
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130209/9060c413/attachment.html>
More information about the Python-Dev
mailing list