python `with open` не создает и не обновляет .log файл - PullRequest
0 голосов
/ 25 марта 2020

Попробовать discord.py. Установили простую ошибку, которая должна появляться в файле журнала. Вот код:

@client.event
async def on_message(message):
    if message.content == 'raise-exception':
        raise discord.DiscordException


@client.event
async def on_error(event, *args, **kwargs):
    with open('err.log', 'a+') as f:
        if event == 'on_message':
            log_entry = 'log entry'
            f.write(log_entry)
        else:
            raise

При возникновении ошибки err.log файл не обновляется. Ничего не происходит вообще. Если я добавлю print(log_entry), он напечатает запись журнала в консоли (что означает только то, что условие выполнено), но все равно ничего не сделает с файлом err.log. Я также попытался использовать файл .txt, но он тоже не работает.

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Просто хочу порекомендовать pathlib, это может упростить обработку пути.

С помощью pathlib вы можете создать файл относительно источника следующим образом:

from pathlib import Path


SOURCE_DIRECTORY = Path(__file__).parent


@client.event
async def on_error(event, *args, **kwargs):
    errorlog_filepath = SOURCE_DIRECTORY / 'err.log'
    with errorlog_filepath.open('a+') as f:
        if event == 'on_message':
            log_entry = 'log entry'
            f.write(log_entry)
        else:
            raise
1 голос
/ 25 марта 2020

Когда вы не указываете какой-либо путь во время чтения или записи файла, он принимает current working directory (cwd) в качестве базового пути.

В вашем случае, когда вы open файл в режиме a+, он должен создавать файл на вашем cwd.

CWD - это путь, из которого вы вызывали свой скрипт python. Вы можете проверить это с python по:

import os

print(os.getcwd())

Так что, если вы не предоставите никакого пути и просто напишите имя файла, это путь, в который будут записаны ваши файлы. Если вы хотите использовать относительный путь, вы можете сделать это, посмотрев на cwd и создав соответствующую строку относительного пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...