Я сделал себе функцию-обёртку, которая обрабатывает IOError при открытии файла, чтобы выводить читабельное сообщение об ошибке. Но файлы я считываю по-разному и не могу вынести это в функцию (в некоторых случаях весь файл считать невозможно, это может быть не нужно, либо файл большой. В других случаях надо пройти весь файл).
def safe_open(*args):
try:
return open(*args)
except IOError:
sys.exit('Error when opening file \'{0}\'. Error #{1[0]}: {1[1]}'.format(\
args[0], sys.exc_info()[1].args))
...
with safe_open(myfile, 'r') as f:
for i in f:
print i
with safe_open(anotherfile, 'r') as f:
try:
conf = ''.join(f).format(**args)
except KeyError:
quit('\nOops, your template \'{0}\' has placeholders for parameters\nthat were not supplied in the command line: - {1}\n\nCan\'t proceed. Ending. Nothing has been changed yet.'.format(args['host_template'], '\n - '.join(sys.exc_info()[1].args)), 1)