25

私はそれが意図的であると確信しているので、誰かがこの振る舞いの理論的根拠を説明できますか?

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が私に泣き言を言わないことを期待しています...

4

2 に答える 2

26

基礎となるシステム コールはユーザー パスを認識せず、ファイル アクセス API はかなり薄いラッパーであるためです。

さらに、 Unix 以外のユーザーにとっては、
(たとえば) fopen("~foo")"foo: no such user" エラーが返された場合 ("~foo"たとえば、Windows では有効なファイル名であるため)、かなり驚くでしょう…<br> または、同様に、 iffopen("~administrator")は、「ディレクトリは次のとおりです: C:\Documents and Settings\Administrator\」のようなエラーを返します。

最後に、コメンテーターが指摘しているように、あなたは「ダックタイピング」と「便利なショートカット」を混同していますが、これらは 2 つのまったく異なるものです

- 便利なショートカットを使用すると、アヒルのように鳴らすことができるものなら何でも、アヒルの代わりに使用できます(Python は、他の言語のように「鳴らそうとはしません」)。

于 2012-05-07T19:25:01.773 に答える