我想处理特定的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中完成吗?
答案 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