Я уверен, что это намеренно, так может кто-то объяснить обоснование такого поведения:
Python 2.7.2 (default, Oct 13 2011, 15:27:47)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from os.path import isdir,expanduser
>>> isdir("~amosa/pdb")
False
>>> isdir(expanduser("~amosa/pdb"))
True
>>>
>>> from os import chdir
>>> chdir("~amosa/pdb")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '~amosa/pdb'
>>> chdir(expanduser("~amosa/pdb"))
>>>
Это действительно раздражает, поскольку в конце концов путь с именем пользователя в нем может быть однозначно разрешен... Я хочу написать код, который может обрабатывать любые входные данные, которые пользователь может мне дать, но это поведение требует от меня вызовите expanduser по каждому пути, с которым должен работать мой код. Это также означает, что где-либо я печатаю этот путь для просмотра пользователем, он будет немного менее разборчивым, чем то, что они мне дали.
Это кажется несовместимым с понятием "утиная типизация", в котором я обобщаю, что я ожидаю, что питон не будет скулить для меня, если на самом деле не проблема...