Python 3 не вызывает исключение для неверного имени файла - PullRequest
0 голосов
/ 04 февраля 2019

Как я могу заставить Python вызвать исключение при открытии файла с неверным именем файла?Например, у меня есть этот код

def write_html_to_file(set_name, pid, html_text):
    if not os.path.exists(HTML_DUMP_DIR_NAME):
        os.makedirs(HTML_DUMP_DIR_NAME)
        path = (HTML_DUMP_DIR_NAME + set_name + '-' + pid + '.html')
    try:
        with open(path, "w+", encoding='utf-8') as html_dump_file:
            html_dump_file.write(html_text)
    except OSError as e:
        logging.basicConfig(filename=LOG_FILE_PATH, level=logging.ERROR)
        logging.error('Failed to create html dump. '
                      + ' error=' + e
                      + ' file_name=' + path)

Предположим, что значение пути равно 'Folder1/SubFolder/Some Title: thing.html', а файл еще не существует.

Я ожидаю, что Python поднимет OSerror с неверными аргументами, или что-то в этом роде. Что на самом деле происходит , так это то, что он создает файл с именем 'Folder1/Subfolder/Some Title'. Обратите внимание, что имя файла заканчивается недопустимым символом

Я знаю, что могу создать свои собственные исключения, которые я могу вызвать, если обнаружу недопустимое имя, но в этом случае это бессмысленно.Меня волнует только то, что я пытаюсь сделать что-то недопустимое на уровне ОС.Кажется, в этом случае он молча терпит неудачу, и мне это не нравится.

Редактировать: Извините, я думаю, мой вопрос не был ясен.

  • Я делаю хочу, чтобы он создал файл, эта часть меня устраивает.
  • Проблема в том, что создаваемое имя файла останавливает на недействительномперсонаж.Я хочу, чтобы там было полное имя.
  • Мой вопрос таков: Почему python не вызывает исключение, поэтому я могу обработать его, когда он встречает недопустимый символ

1 Ответ

0 голосов
/ 04 февраля 2019

Получается (спасибо eryksun), в частности, ':' в строке, которую вы передаете open(), на самом деле является разделителем в системах NTFS, который означает, что вы хотите записывать в несколько потоков данных:

Мой код отлично работает для любого другого символа, который недопустим в именах файлов (например, *).Таким образом, решение, которое я придумала, состоит в том, чтобы заменить любой ':' в моем имени файла на -, прежде чем я передам его open()

base_file_name= base_file_name.replace(':', '-')

':' s, которые в любом случае недопустимы в именах файлов, так что этохорошо для меня.

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