Возможно больше исключений, чем только SyntaxError:
ZeroDivisionError, например, для "1/0"
NameError, например, для "franz/3"
(с неопределенным franz
)
TypeError, например, для "[2, 4]/2"
и даже больше. Итак, вы можете поймать их всех:
try:
eval (expr)
except (SyntaxError, NameError, TypeError, ZeroDivisionError):
pass
Фактически, фактически все существующих исключений могут быть выброшены, и любой ущерб может быть нанесен при оценке любого кода, если вы не исключите функции (например, os.system ("rm -rf /")
, см. Также Eval действительно опасен ).