我确定这是有意的,那么能否有人解释一下这种行为的原理:
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。这也意味着在任何我为用户查看的地方打印该路径,它将比他们给我的略微难以阅读。
这似乎与“鸭子类型”的概念不一致,其中我通常会推广到我期望Python不会向我抱怨,除非实际上存在问题...
expanduser
的调用集中起来,使其不再烦人。我不知道。 - larskschdir
假设它是一个字面名称,这绝对不是鸭子类型的意思。 - Chris Eberle