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

2024-06-16 09:35:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想处理如下特定的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实现吗?在


Tags: 代码onlyosaserrorhandletryexcept
2条回答

您可以这样做:

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

os.scandir()不抛出这些类型的异常。它引发^{}异常。但是,它允许您确定发生的错误类型。在

有一个large number of possible errors可能是{}的一部分。您可以使用这些来提升您自己的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

相关问题 更多 >