尝试阻止捕获错误的异常

时间:2018-07-17 11:11:47

标签: python python-3.x python-os

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

有什么我不懂的吗?

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 个答案:

答案 0 :(得分:2)

您的代码没有错。它可以按预期正常运行,如果目录已经存在,则捕获2x2,如果目录名称包含无效符号,则捕获import numpy as np from sympy import Matrix from scipy.optimize import minimize def Testfunction(x): a = np.array([[1],[3],[6]]) #3x1 np.ndarray b = np.array([[2]]) #1x1 np.ndarray c = Matrix(x@x.T).vech() #3x1 mutable dense matrix y = np.transpose(np.subtract(a,c)) * b * np.subtract(a,c) return y #y should be a 1x1 np.ndarray x0= np.array([[1],[3]]) # 2x1 np.ndarray print(Matrix(x0@x0.T).vech()) # works (3x1 mutable dense matrix) print(Testfunction(x0)) # works (3x3 instead of 1x1 np.ndarray though) result = minimize(Testfunction, x0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True}) #does not work as explained above 。所以我认为问题出在您测试代码的方式上

FileExistsError

答案 1 :(得分:0)

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