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

Buo*_*uoy 2 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()
Run Code Online (Sandbox Code Playgroud)

这可以在python中完成吗?

And*_*ndy 5

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

这里有大量可能出现的错误,可能是部分OSError.您可以使用它们来引发自己的自定义异常,然后在堆栈中进一步处理它们.

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
Run Code Online (Sandbox Code Playgroud)