PyCharm: На переменную в блоке finally можно ссылаться перед присваиванием?

PyCharm предупреждает меня, что переменная category можно ссылаться до назначения, но я так не думаю.

Кроме должен ловить каждый Exception (кроме фатальных ошибок) и наконец вызывается после try или же except блок.

    try:
        category = lst[2]
    except:
        category = None
    finally:
        if not category: #here
            category = self.default_category

Как вы думаете? Это правда или это ошибка?

1 ответ

Возможно, PyCharm видит назначение, не учитывая "назначение чему". Это None это то, что имеет значение, подумайте, если вы вместо этого написали:

try:
    category = lst[2]
except:
    category = Noone
finally:
    if not category:
        category = self.default_category

(Или же None/1и т. д.) Тогда вы получите:

NameError: name 'category' is not defined

как будет исключение в случае, если lst были пусты:

Когда исключение произошло в предложении try и не было обработано предложением исключений (или оно произошло в предложении исключения или иначе), оно повторно вызывается после выполнения предложения finally.

Другие вопросы по тегам