Очень странно поймать e
и затем вернуть его; почему пользователь вашей функции хочет, чтобы ошибка возвращалась, а не возникала? Возврат ошибки не обрабатывает ее, он просто передает вызывающей стороне ответственность за обработку ошибки. Разрешение возникновения ошибки - более естественный способ сделать так, чтобы вызывающая сторона отвечала за ее обработку. Поэтому имеет смысл вообще не отлавливать ошибку:
def read_file(filename):
with open(filename, 'rb') as fd:
return fd.read()
Для желаемого варианта использования, когда вы хотите написать if file:
, чтобы проверить, существует ли файл, ваша read_file
функция может перехватить error и return None
, так что ваше if
условие будет ложным:
def read_file(filename):
try:
with open(filename, 'rb') as fd:
return fd.read()
except FileNotFoundError:
return None
Однако это означает, что если вызывающий не знает, что функция может вернуть None
, вы ' Вы получите ошибку при использовании None
там, где ожидались данные файла, вместо FileNotFoundError
, и вам будет сложнее определить проблему в вашем коде.
Если вы намерены выполнить свою функцию для Чтобы вызвать его с именем файла, которое может не существовать, присвоение этой функции имени, подобного read_file_if_exists
, может быть лучшим способом прояснить, что вызов этой функции с несуществующим именем файла не считается ошибкой.