Исключение, которое выдается, когда файл не имеет требуемых разрешений

#python #exception

#python #исключение

Вопрос:

У меня есть try except блок, в котором я проверяю права доступа к файлам, и мой except блок должен возвращать соответствующее сообщение об ошибке, когда права доступа к файлам слишком открыты.

 if oct(os.stat(self.file_path).st_mode amp; 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 ошибку.

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

Комментарии:

1. Разве это не было бы except PermissionError as e: print (e) ?

2. Вы не определили MyError . Кроме того, исключения ничего не возвращают, хотя return инструкция может быть выполнена в except блоке.

3. @poobear, вы смогли это решить?

Ответ №1:

Оно должно быть PermissionError в вашем исключении:

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

Ответ №2:

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

Ответ №3:

Вы можете написать эту функцию следующим образом Решение 1:

 if oct(os.stat(self.file_path).st_mode amp; 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 amp; 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)