Jestem pewien, że to zamierzone, więc może ktoś wyjaśnić uzasadnienie dla takiego zachowania:Dlaczego jestem zmuszony do os.path.expanduser w python?
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"))
>>>
To naprawdę irytujące, ponieważ, mimo wszystko, ścieżka z nazwą użytkownika w nim mogą być rozwiązane w sposób jednoznaczny ... Chcę napisać kod, który poradzi sobie z każdym rodzajem danych wprowadzanych przez użytkownika, ale to zachowanie wymaga ode mnie wywoływania programu expanduser na każdej ścieżce, z którą ma do czynienia mój kod. Oznacza to również, że wszędzie, gdzie wydrukuję tę ścieżkę, aby użytkownik mógł ją zobaczyć, będzie to nieco mniej czytelne niż to, co mi dali.
Wydaje sprzeczne z koncepcją „kaczka wpisując”, w którym uogólnienia oznaczać, że nie spodziewam Pythonie jęcz mi chyba, że faktycznie problem ...
Nie wiem. Jako programista w Pythonie doceniam fakt, że Python nie ingeruje w moje magiczne rozszerzenia, chyba że wyraźnie zażądam takiego zachowania. Jeśli poprawnie zaimplementujesz swój kod, prawdopodobnie możesz scentralizować swoje połączenia z 'expanduser', aby zmniejszyć jego uciążliwość. – larsks
'chdir' zakłada, że jest to dosłowne imię. A to zdecydowanie nie znaczy, co oznacza pisanie kaczek. –
Utwórz funkcję, która obsługuje wszystkie zachowania. Python zapewnia podstawową funkcjonalność. – Blender