Try 块捕获错误的异常

Try block catches wrong exception

我正在尝试创建一个文件夹,处理不同的错误(FileExistsError 如果文件夹已经存在,OSError 如果文件夹名称包含非法字符),但是 Python似乎总是在捕获错误时选择第一个 except 块,无论它是哪个块以及它们的顺序。

有什么地方没听懂吗?

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)

我们可以为目录指定任何名称,通过 python 代码创建目录没有可遵循的命名约定。 在这种情况下,如果输入的名称已经是目录名称,则只有第一个 except 块会抛出消息,否则不会抛出消息。

您的代码没有任何问题。它按预期正常工作,如果目录已经存在则捕获 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