Давайте рассмотрим несколько вещей одну за другой:
- Вопрос: Создайте минимальный пример
- Ответ: Почему ваш try / else не работает
- Лучший практика: сделайте попытку / за исключением как можно более плотных
- Лучшая практика: используйте 'с'
минимальное
Нам не нужны детали для попробуйте / кроме части:
try:
highscore = open('highscore.txt', 'r')
print highscore.read()
highscore.close()
except OSError:
pass
else:
highscore = open('highscore.txt', 'a')
highscore.write('foo')
highscore.close()
Вопрос
Почему это не работает? Попытка / исключение / другое срабатывает, если есть без исключения , и за исключением при наличии исключения. Вы хотите, чтобы ваш код был в кроме части, и, следовательно, вам даже не нужно другое.
try:
highscore = open('highscore.txt', 'r')
print highscore.read()
highscore.close()
except OSError:
highscore = open('highscore.txt', 'a')
highscore.write('foo')
highscore.close()
Затяните попытку / кроме
Вы не нажмете OSError with (например: re.findall
), поэтому давайте сделаем его как можно меньше.
Используйте с
Тогда вам не нужно закрывать файл самостоятельно.
Используйте json / yaml для хранения данных
Избегайте разбора регулярных выражений и большого количества строковых данных, используйте другой код для выбора формата вывода.
Используйте 'w' вместо 'a', если вы в любом случае просто перезаписываем файл
Окончательная рекомендуемая версия
PATH = 'highscore.json'
try:
with open(PATH, 'r') as f:
info = json.load(f)
except (OSError, json.JSONDecodeError):
info = {}
score = info.get('score')
if score is None or score < total_points:
with open(PATH, 'w') as f:
json.dump({'name': name, 'score': total_points}, f)
print('Your highscore has been saved!')