質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

886閲覧

連結したパスを取得すると \ となるはずのところが \\ になる

yohida19

総合スコア52

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/07/12 09:00

発生している問題・エラーメッセージ

本番環境用のsettigs.py でrunserver したところ以下のエラーが出ました。
ファイルがないなら作れば解決するかと思ったのですが、そもそもファイルパスの \ となるべきところが \\ となっています。

Traceback (most recent call last): File "C:\test\AppData\Local\Programs\Python\Python39\lib\logging\config.py", line 564, in configure handler = self.configure_handler(handlers[name]) File "C:\test\AppData\Local\Programs\Python\Python39\lib\logging\config.py", line 745, in configure_handler result = factory(**kwargs) File "C:\test\AppData\Local\Programs\Python\Python39\lib\logging\handlers.py", line 208, in __init__ BaseRotatingHandler.__init__(self, filename, 'a', encoding=encoding, File "C:\test\AppData\Local\Programs\Python\Python39\lib\logging\handlers.py", line 58, in __init__ logging.FileHandler.__init__(self, filename, mode=mode, File "C:\test\AppData\Local\Programs\Python\Python39\lib\logging\__init__.py", line 1146, in __init__ StreamHandler.__init__(self, self._open()) File "C:\test\AppData\Local\Programs\Python\Python39\lib\logging\__init__.py", line 1175, in _open return open(self.baseFilename, self.mode, encoding=self.encoding, FileNotFoundError: [Errno 2] No such file or directory: 'C:\\test\\venv_done_housework\\done\\logs\\django.log' # ファイルパスがおかしい The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\test\AppData\Local\Programs\Python\Python39\lib\threading.py", line 973, in _bootstrap_inner self.run() File "C:\test\AppData\Local\Programs\Python\Python39\lib\threading.py", line 910, in run self._target(*self._args, **self._kwargs) File "C:\test\venv_done_housework\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "C:\test\venv_done_housework\lib\site-packages\django\core\management\commands\runserver.py", line 125, in inner_run autoreload.raise_last_exception() File "C:\test\venv_done_housework\lib\site-packages\django\utils\autoreload.py", line 87, in raise_last_exception raise _exception[1] File "C:\test\venv_done_housework\lib\site-packages\django\core\management\__init__.py", line 398, in execute autoreload.check_errors(django.setup)() File "C:\test\venv_done_housework\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "C:\test\venv_done_housework\lib\site-packages\django\__init__.py", line 19, in setup configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) File "C:\test\venv_done_housework\lib\site-packages\django\utils\log.py", line 76, in configure_logging logging_config_func(logging_settings) File "C:\test\AppData\Local\Programs\Python\Python39\lib\logging\config.py", line 809, in dictConfig dictConfigClass(config).configure() File "C:\test\AppData\Local\Programs\Python\Python39\lib\logging\config.py", line 571, in configure raise ValueError('Unable to configure handler ' ValueError: Unable to configure handler 'file'

該当のソースコード

python

1# ハンドラの設定 2 'handlers': { 3 'file': { 4 'level': 'INFO', 5 'class': 'logging.handlers.TimedRotatingFileHandler', 6 'filename': os.path.join(BASE_DIR, 'logs/django.log'), 7 'formatter': 'prod', 8 'when': 'D', # ログローテーション(新しいファイルへの切り替え)間隔の単位(D=日) 9 'interval': 1, # ログローテーション間隔(1日単位) 10 'backupCount': 7, # 保存しておくログファイル数 11 }, 12 }, 13

試したこと

python

1print(os.path.join(BASE_DIR, 'logs/django.log')) 2# C:\test\venv_done_housework\done\logs/django.log 3print(BASE_DIR) 4# C:\test\venv_done_housework\done

os.path.join では \\ になりませんでした。
何かヒントを頂けますと幸いです。よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

Django 4.0.4
PostgreSQL 14.0
python 3.9.6
Windows 10 home

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーメッセージにて\\\と表示されること自体は正常です。
Djangoでのlogging動作、設定については知識がないので推測ですが
そのパスで表されたファイルまたは上位フォルダが存在しないため?エラーが発生しているのではないでしょうか。

Python

1import os 2 3BASE_DIR = r'C:\windows' 4d = {'filename' : BASE_DIR.replace('\\','/') + 'logs/django.log'} 5d = {'filename' : os.path.join(BASE_DIR, 'logs/django.log')} 6with open(d['filename'], 'r') as f: 7 pass 8# FileNotFoundError: [Errno 2] No such file or directory: 'C:\\windows\\logs/django.log'

投稿2022/07/12 09:23

can110

総合スコア38256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohida19

2022/07/12 10:04

早速のご回答ありがとうございます! そうだったのですね!解決しました。 指定したパスにファイルを作成したつもりで、作成場所が誤っていたことがエラーの原因でした。 もう一点、お聞きしたいことがございます。 試したことの2行目で、/ と \ が混在してしまいます。これまでこれでエラーになったことはないのですが、後々何かのエラーの原因になったりするものですか?
can110

2022/07/12 10:31

ほぼほぼWindows上では/も\も同じく扱ってくれるので、経験上も問題になることはないと思います。 が、後々ほかの環境、OSなどで動かすことを考えると、パス区切り文字は「/」で統一するか os.sepなどを利用するほうがベターではあります。
yohida19

2022/08/08 06:06

通知を見逃しておりました。 丁寧に教えて頂き、勉強になりました。 この度はご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問