代码之家  ›  专栏  ›  技术社区  ›  Oto Shavadze

意外错误:replace()接受2个位置参数,但给出了3个

  •  1
  • Oto Shavadze  · 技术社区  · 3 年前

    在设置.py我有:

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

    从某种角度来看:

    from django.http import HttpResponse
    from django.conf import settings
    
    
    def test_view(request):
        return HttpResponse( settings.BASE_DIR.replace("src", "") )
    

    这会产生错误: replace() takes 2 positional arguments but 3 were given

    我很困惑,这个错误是怎么出现的?如果有:

    return HttpResponse( settings.BASE_DIR )
    

    返回完整路径,类似于: /home/full/path/to/project/src

    这也行

     return HttpResponse( "/home/full/path/to/project/src".replace("src", "") )
    

    你能帮我说说这条线路有什么问题吗:

    return HttpResponse( settings.BASE_DIR.replace("src", "") )
    

    ?

    3 回复  |  直到 3 年前
        1
  •  2
  •   NKSM    3 年前

    将其转换为 string :

    str(settings.BASE_DIR).replace("src", "")
    
        2
  •  1
  •   Le Minaw    3 年前

    你不能打电话给警察 replace 方法 str stype,但是 Path 上课地点 pathlib (因为 BASE_DIR 是一个 路径 实例)。

    只需要两个参数(例如。 my_path.replace(target)) 因此例外。

    Docs here 关于is的作用(基本上是重命名文件或目录)。

    投出你的 路径 实例到字符串。

        3
  •  1
  •   iklinac    3 年前

    从django3.1基本目录默认设置为new pathlib 模块路径对象为 documented

    source

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

    巧合的是,路径也 .replace() 方法,但它和string replace没有相同的用例

    你可能想用 parent 访问器:

    settings.BASE_DIR.parent