Исключение, которое выдается, когда файл не имеет необходимых разрешений - PullRequest
0 голосов
/ 15 марта 2019

У меня есть блок 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 error.

Какое более подходящее исключение для определения здесь?Мое исключение должно вернуть мне словарь с 1 в качестве key и сообщением об ошибке как value.

Ответы [ 3 ]

2 голосов
/ 15 марта 2019

Это должно быть 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 голос
/ 15 марта 2019

Вы можете написать эту функцию следующим образом: Решение 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)
1 голос
/ 15 марта 2019

Вы можете создать собственный класс исключений, расширяющий класс 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...