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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当文件没有所需权限时抛出异常相关的知识,希望对你有一定的参考价值。

我有一个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

答案

你的例外应该是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)}
另一答案

您可以创建扩展Base 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)
另一答案

您可以像这样解决方案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)

以上是关于当文件没有所需权限时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

异常库

S3 上传程序在尝试上传大文件时抛出异常

0xC0000005 读取二进制文件时抛出异常(C++)

removeItem(at: ) 成功删除目标文件时抛出异常

当 Jackcess 连接正常时,UCanAccess 驱动程序在尝试连接 Access 数据库时抛出异常

当 string.length() 为 0 时抛出异常