繁体   English   中英

类型错误:join() 参数必须是 str 或字节,而不是“PosixPath”

[英]TypeError: join() argument must be str or bytes, not 'PosixPath'

所以,我收到以下错误: TypeError: join() argument must be str or bytes, not 'PosixPath'

在 Ubuntu 16.04 上检查我的 Django 安装时会发生这种情况。 完整的错误是:

    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  File "/usr/lib/python3.5/posixpath.py", line 89, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib/python3.5/genericpath.py", line 143, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'PosixPath'

这是来自 settings.py 文件。

在文件中我有:

from pathlib import Path
import os

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

在我的开发环境中,它正在运行并运行,但在这里我收到错误。 生产中的 Python 版本为 3.5.1-3。 通常,软件包也应安装相同(pip freeze/install -r)。

任何人都有想法将我推向正确的方向?

提前致谢,

仅使用pathlib库使它变得更容易:

BASEPATH = Path(__file__).resolve().parent.parent

STATIC_ROOT = BASEPATH.joinpath('static')
MEDIA_ROOT = BASEPATH.joinpath('media')

PosixPath 提供了更多的自由来指定,例如,仅文件名或文件列表。 最终,您始终可以将 PosixPath 转换为字符串:

str(MEDIA_ROOT)

所以这里的问题是你的BASE_DIR是一个 pathlib 路径,而 os.path.join 通常使用字符串。 我会改为使用纯粹的路径库,如下所示:

from pathlib import Path
import os

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
...
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'static'

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

这让 pathlib 处理路径连接,并且碰巧更简单和更容易阅读(意见)。

编辑:只是想补充一点,从 python 3.6 开始,os.path.join 应该处理所有类似路径的对象,这就是它可以在某些环境中工作的原因 - 请参阅文档: https : //docs.python.org/ 3/library/os.path.html#os.path.join

这是因为 Path( file ).resolve().parent.parent 返回一个对象。 但是对于“加入”功能,需要一个字符串,因此更改:

BASE_DIR = Path(__file__).resolve().parent.parent

到:

BASE_DIR = str(Path(__file__).resolve().parent.parent)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM