Полагаю, есть 2 части:
Мне нужно добавить обработку ошибок
и
Мне нужна отдельная функция для вычисление среднего значения, которое я назову в основном
Во второй части, я думаю, вам не нужна помощь. Но обработка ошибок - это своего рода искусство, поэтому я понимаю, где вы можете застрять в этом. Вот несколько советов, которые помогут вам начать работу.
Наиболее распространенный тип обработки ошибок связан с обработкой ввода. Думая более широко, мы можем расширить это до всего, что пересекает границу пространства памяти программ . Это включает не только пользовательский ввод, но и вывод; взаимодействие с файловой системой; использование сетевых интерфейсов (или любого устройства связи или аппаратного интерфейса); запуск / остановка или иное взаимодействие с другими программами; позвонить в библиотеку, которая делает что-либо из этого от нашего имени; и многое другое ....
Итак, какие части вашей программы взаимодействуют с «внешним»? Я вижу несколько:
- в
main()
программа делает предположение о существовании файла. Вы уже проверяете, чтобы убедиться, что этот файл существует, и возвращаете 0
, если это не так (вы можете изменить его на ненулевое значение, так как 0
обычно используется, чтобы сигнализировать об отсутствии ошибок) process_file()
делает это: f = open(filename,'r')
но вы уверены, что это будет работать? Есть ли условия, когда это может потерпеть неудачу? - Что если пользователь, который запускает программу, не имеет прав на чтение этого файла?
- Что если файл был удален или изменен в промежутке между проверкой в
main
и последующий open
вызов в process_file
? Это состояние гонки TOCTOU , и каждый разработчик программного обеспечения должен следить за этим.
- Вероятно, самый очевидный источник потенциальных ошибок для этой программы это содержимое входного файла:
- Мы предполагаем, что входные данные разделены запятыми. Что, если пользователь использует вкладки или какой-либо другой символ?
- При обработке строк вы получаете:
count = int(parsed[1])
, но как узнать, что parsed[1]
можно привести к int
? - Что произойдет, если файл существует, но пуст (подсказка:
len(scores)==0
)? Всегда смотрите на эти крайние случаи.
Наконец, похоже, что вы используете операторы if-then
для проверки ошибок. Это хорошо, но еще одним мощным инструментом для устранения ошибок являются операторы try-except
. Они не являются взаимоисключающими: иногда проще использовать оператор if
, а иногда лучше ловить исключение с помощью try-except
. Некоторые из ошибок, с которыми вам придется иметь дело, легче устранить, если использовать один подход поверх другого.