Sono sicuro che è intenzionale, in modo che qualcuno può spiegare le ragioni di questo comportamento:Perché sono obbligato a os.path.expanduser in 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"))
>>>
E 'davvero fastidioso perché, dopo tutto, il percorso con un nome utente in esso può essere risolto in modo inequivocabile ... Voglio scrivere un codice che possa gestire qualsiasi tipo di input che un utente potrebbe darmi, ma questo comportamento mi obbliga a chiamare expanduser su ogni percorso che il mio codice deve gestire. Significa anche che ovunque io stampi quel percorso che l'utente deve vedere, sarà leggermente meno leggibile di quello che mi hanno dato.
Questo sembra in contrasto con il concetto di "duck typing", in cui generalizzo nel senso che mi aspetto Python non a piagnucolare per me, se non c'è in realtà un problema ...
Non so. Come sviluppatore Python, apprezzo il fatto che Python non aggiri magicamente le stringhe su di me a meno che non richiedi esplicitamente tale comportamento. Se implementi il tuo codice correttamente, puoi probabilmente centralizzare le tue chiamate a 'expanduser' per renderlo meno fastidioso. – larsks
'chdir' assume che sia un nome letterale. E questo non è assolutamente ciò che significa digitazione anatra. –
Crea una funzione che gestisca tutto il comportamento. Python ti offre le funzionalità principali. – Blender