#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)