Сначала посмотрите/прочитайте этот вопрос: Обработка Ошибки проверки типов Python с объявлениями возвращаемых типов (значения полей по умолчанию = Нет)
Сообщение об ошибке:
Код: Выделить всё
Function with declared return type "int" must return value on all code paths. "None" is incompatible with "int".
Код: Выделить всё
from dataclasses import dataclass
from typing import Any, Union, List
class Exp:
pass
@dataclass
class Const(Exp):
value: int
@dataclass
class Negate(Exp):
value: Exp
@dataclass
class Add(Exp):
value1: Exp
value2: Exp
@dataclass
class Multiply(Exp):
value1: Exp
value2: Exp
def eval_exp_old(e: Exp) -> int | Any:
match e:
case Const(i):
return i
case Negate(e2):
return -eval_exp_old(e2)
case Add(e1, e2):
return eval_exp_old(e1) + eval_exp_old(e2)
case Multiply(e1, e2):
return eval_exp_old(e1) * eval_exp_old(e2)
test_exp: Exp = Multiply(Negate(Add(Const(2), Const(2))), Const(7))
# -28
old_test = eval_exp_old(test_exp)
Код: Выделить всё
def eval_exp_old(e: Exp) -> int { ... }
Кстати, проверьте эту статью, которая также опубликована в принятом ответе.
https://discuss.python .org/t/draft-pep-sealed-decorator-for-static-typing/49206
Подробнее здесь: https://stackoverflow.com/questions/787 ... clarations