Как я писал в своем комментарии, tfstate_dict
не появляется, пока вы не выйдете из блока try
.Но это не значит, что это относится ко всему предшествующему коду;это просто относится к tfstate_dict
, потому что это самая последняя строка.
Это легко проверить с помощью следующего:
try:
a = int(2)
b = int(3)
c = int('hi')
except:
print(locals())
print()
print(locals().get('a'))
Вы должны увидеть, что 'a'
и 'b'
оба определены и могут быть доступны (в зависимости от того, как вы выполняете этокод, в locals()
тоже может быть много чего).Итак, существование 'a'
и 'b'
не дает вам гарантии того, что 'c'
существует.
Есть две проблемы с вашей текущей обработкой исключений:
- Возможно, слишком многопроисходит в вашем блоке
try
так, как вы это делаете в настоящее время.Этот код потерпит неудачу, если файл не может быть найден, но вы не обязательно знаете, что происходит.И если ваш код изначально потерпел неудачу только на tfstate_dict = json.load(contents)
, вы теперь чесаете голову, почему вы вдруг получаете NameError
на print(contents)
. - Вы не хотите, чтобы вас поймалиэти проблемы с одеялом
except
.Как минимум, вы захотите использовать except Exception as e:
, что также позволяет печатать e
.
Вот гипотетическая ситуация, когда вы обрабатываете несуществующий файл, и вы также делаете попытку анализа JSON.
import json
from json.decoder import JSONDecodeError
try:
with open('something.json') as infile:
try:
#data = json.load(infile) # This is what you'd really use
data = json.loads("{hi: 2}") # But let's make it fail
except JSONDecodeError:
print("Not valid JSON, try something else")
data = infile.read()
except FileNotFoundError:
print("Can't find file")
data = ''