当文件没有必需的权限时抛出异常

时间:2019-03-15 06:39:34

标签: python exception

我有一个try except块,我在其中检查文件权限,而当文件权限太开放时,我的except块应该返回相应的错误消息。

if oct(os.stat(self.file_path).st_mode & 0o700):
    try:
        # do something with file path
    except MyError as err:
        return {'1': 'Permissions on the .bsm file is too opened'}

我尝试搜索IOError,但没有发现它与我的用例相关,并且我定义的MyError引发unresolved reference错误。

在此处定义的更合适的例外是什么? 我的例外情况应该返回给我一个字典,其中以1key,错误消息为value

3 个答案:

答案 0 :(得分:2)

在您的例外情况下,应为PermissionError

   if oct(os.stat(self.file_path).st_mode & 0o700):
        try:
        # do something with file path
        except PermissionError as err:
            return {'1': str(err)}

答案 1 :(得分:1)

您可以创建一个自定义异常类,扩展基类Exception的类。 也许是这样的。

class MyError(Exception):
    """
    A common exception class
    """
    message = 'Some default message'

    def __init__(self, message=None):
        self.message = message or self.message
        super(MyError, self).__init__(self.message)

def is_file_readable():
    return False

try:
    if not is_file_readable():
        raise MyError(message={'cause': 'File not readable'})

except MyError as e:
    print(e.message)

答案 2 :(得分:1)

您可以这样编写此函数 解决方案1:

if oct(os.stat(self.file_path).st_mode & 0o700):
  try:
    # do something with file path
  except Exception as err:
    print(err) #if you want to see the error message
    return {'1': 'Permissions on the .bsm file is too opened'}

解决方案2: 如果您还想知道文件打开异常。然后试试这个:

try:
  fileopen = oct(os.stat(self.file_path).st_mode & 0o700)
  if fileopen:
    try:
      # do something with file path
    except Exception as err:
      print(err) #if you want to see the error message
      return {'1': 'Permissions on the .bsm file is too opened'}

except Exception as e:
  print("File open error",e)