Попробуй блок ловит неправильное исключение

Я пытаюсь создать папку, обрабатывая различные ошибки (FileExistsError если папка уже существует и OSError если имя папки содержит недопустимые символы), но Python, похоже, всегда выбирает первый, кроме блока, при обнаружении ошибки, независимо от того, какая она и в каком порядке.

Есть что-то, чего я не понял?

import os
from pathlib import Path

def generateSetup(name) :
    dir_path = os.path.dirname(os.path.realpath(__file__))
    if not Path(dir_path + '/setups').exists() : os.mkdir(dir_path + '/setups')

    try : os.mkdir(dir_path + '/setups/' + name)
    except FileExistsError : print('The file already exists')
    except OSError : print('The name contains illegal characters')

stp_name = input('Enter your setup\'s name :')
generateSetup(stp_name)

2 ответа

Решение

В вашем коде нет ничего плохого. Работает правильно как задумано, ловит FileExistsError если каталог уже существует или OSError если имя каталога содержит недопустимые символы. Поэтому я предполагаю, что проблема в том, как вы тестируете код

>>> dloc='tmp/\/b'
>>> try:
...     os.mkdir(dloc)
... except FileExistsError:
...     print('The file already exists')
... except OSError:
...     print('The name contains illegal characters')
... 
The name contains illegal characters

Мы можем дать любое имя каталогу, в котором нет соглашений об именах, которым нужно следовать при создании каталога с помощью кода Python. В этом случае только первый, кроме блока, выдаст сообщение, если введенное имя уже является именем каталога, в противном случае - нет.

Другие вопросы по тегам