Чтобы понять, почему это удивительное поведение не полностью ужасны, рассмотрим приложение, которое принимает имя конфигурационного файла в качестве аргумента:
config_root = "/etc/myapp.conf/"
file_name = os.path.join(config_root, sys.argv[1])
Если приложение выполняется с:
$ myapp foo.conf
Файл конфигурации /etc/myapp.conf/foo.conf
будет использоваться.
Но что произойдет, если приложение вызывается с:
$ myapp /some/path/bar.conf
Затем myapp
должен использовать конфигурационный файл на /some/path/bar.conf
(и не /etc/myapp.conf/some/path/bar.conf
или подобного).
Это может быть не очень хорошо, но я считаю, что это мотивация для поведения абсолютного пути.
-1: ** Нет ** строка должна включать в себя символ «/». Одна цель os.path.join состоит в том, чтобы не помещать какие-либо слэши в путь. –
это не круто. если я явно попрошу присоединиться к этим путям (или строкам), сделайте это, если есть ведущий «/» или нет в этом пути/строке. – aschmid00
, если вы этого хотите, просто используйте str.join(), это os.path, и поэтому он согласуется с семантикой пакета. – marcorossi