Python用户定义的异常,用于处理特定的OSError代码

时间:2016-02-03 14:08:46

标签: python exception user-defined

我想处理特定的OSError代码,如下所示:

try:
    os.scandir()
except OSPermissionError as error:  
    # Only catch errno.EACCES, errno.EPERM
    handle_permission_error()
except OSFileNotFoundError as error: 
    # Only catch errno.ENOENT
    handle_FileNotFoundError_error()

可以在python中完成吗?

2 个答案:

答案 0 :(得分:5)

os.scandir()不会抛出这些类型的异常。它引发OSError例外。但是,它确实允许您确定发生的错误类型。

有一个large number of possible errors可能是OSError的一部分。您可以使用它们来引发自己的custom exceptions,然后在堆栈中进一步处理它们。

class OSPermissionError(Exception):
    pass

class OSFileNotFoundError(Exception):
    pass

try:
    os.scandir()
except OSError as error:
    # Not found
    if error.errno == errno.ENOENT: 
        raise OSFileNotFoundError()
    # Permissions Error
    elif error.errno in [errno.EPERM, errno.EACCES]: 
        raise OSPermissionError()
    else:
        raise

答案 1 :(得分:1)

你可以这样做:

try:
    os.scandir()
except OSError as error:
    if error.errno in (errno.EACCES, errno.EPERM): #Permission denied
        handle_permission_error()
    elif error.errno == errno.ENOENT: #File not found
        handle_FileNotFoundError_error()
    else:
        raise