簡體   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