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
我正在尝试创建一个文件夹,处理不同的错误(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