当前位置:  开发笔记 > 编程语言 > 正文

TypeError:makedirs()得到一个意外的关键字参数'exists_ok'

如何解决《TypeError:makedirs()得到一个意外的关键字参数'exists_ok'》经验,为你挑选了1个好方法。

我正在使用"Lightweight Django"这本书学习Django.我正在使用Django 1.8.但是,我无法运行此代码.这是错误消息:

在此输入图像描述

工作树:

在此输入图像描述

build.py

import os
import shutil

from django.conf import settings
from django.core.management import call_command
from django.core.management.base import BaseCommand
from django.core.urlresolvers import reverse
from django.test.client import Client

def get_pages():
    for name in os.listdir(settings.SITE_PAGES_DIRECTORY):
        if name.endswith('.html'):
            yield name[:-5]

class Command(BaseCommand):
    help = 'Build static site output.'
    leave_locale_alone = True

    def handle(self, *args, **options):
        if os.path.exists(settings.SITE_OUTPUT_DIRECTORY):
            shutil.rmtree(settings.SITE_OUTPUT_DIRECTORY)
        os.mkdir(settings.SITE_OUTPUT_DIRECTORY)
        os.makedirs(settings.STATIC_ROOT, exists_ok=True)
        call_command('collectstatic', interactive=False, clear=True,verbosity=0)
        client = Client()
        for page in get_pages():
            url = reverse('page', kwargs={'slug': page})
            response = client.get(url)
            if page == 'index':
                output_dir = settings.SITE_OUTPUT_DIRECTORY
            else:
                output_dir = os.path.join(settings.SITE_OUTPUT_DIRECTORY, page)
                os.makedirs(output_dir)
            with open(os.path.join(output_dir, 'index.html'), 'wb') as f:
                f.write(response.content)

prototypes.py

import os
import sys
from django.conf import settings


BASE_DIR = os.path.dirname(__file__)


settings.configure(
    DEBUG = True,
    SECRET_KEY= 'qfzf!b1z^5dyk%syiokeg4*2xf%kj68g=o&e8qvd@@(1lj5z8)',
    ROOT_URLCONF='sitebuilder.urls',
    MIDDLEWARE_CLASSES=(),
    INSTALLED_APPS=(
        'django.contrib.staticfiles',
        'sitebuilder',
    ),

    TEMPLATES=(
        {
            'BACKEND':'django.template.backends.django.DjangoTemplates',
            'DIRS':[],
            'APP_DIRS':True,
        },
    ),
    STATIC_URL='/static/',
    SITE_PAGES_DIRECTORY=os.path.join(BASE_DIR,'pages'),
    SITE_OUTPUT_DIRECTORY=os.path.join(BASE_DIR,'_build'),
    STATIC_ROOT=os.path.join(BASE_DIR,'_build','static'),
)





if __name__ == "__main__":
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

Alasdair.. 15

你有一个错字,它是exist_ok,不是exists_ok正确的代码应该是:

os.makedirs(settings.STATIC_ROOT, exist_ok=True)

但是,这也不适合你,因为exist_ok在Python 3.2中添加了.您正在使用Python 2.7,但本书是为Python 3编写的(可能是3.4,我不确定)

在Python 2.7中,您可以在目录已存在时捕获异常:

try:
    os.makedirs(settings.STATIC_ROOT)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

但是,我强烈建议您切换到Python 3.如果您尝试在Python 2中编写Python 3代码,则会遇到其他问题.



1> Alasdair..:

你有一个错字,它是exist_ok,不是exists_ok正确的代码应该是:

os.makedirs(settings.STATIC_ROOT, exist_ok=True)

但是,这也不适合你,因为exist_ok在Python 3.2中添加了.您正在使用Python 2.7,但本书是为Python 3编写的(可能是3.4,我不确定)

在Python 2.7中,您可以在目录已存在时捕获异常:

try:
    os.makedirs(settings.STATIC_ROOT)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

但是,我强烈建议您切换到Python 3.如果您尝试在Python 2中编写Python 3代码,则会遇到其他问题.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有