#python
#python
Вопрос:
Я пишу какой-то простой веб-интерпретатор для vk.com . Я ищу сообщения, проверяю, являются ли они допустимым кодом Python, а затем я хочу выполнить этот код и вернуть любой stdout
отправителю кода. Я реализовал что угодно, кроме проверки кода.
import ast
def is_valid(code):
try:
ast.parse(code)
except SyntaxError:
print('Input isnt code.')
return False
print('Code is ok.')
return True
is_valid()
всегда возвращайте True
независимо от того, что входит. Я действительно в замешательстве…
Комментарии:
1. Можете ли вы привести пример не-кода, который возвращает
True
.2. >>> is_valid(‘test’) Код в порядке. Верно
3. Это допустимый код — идентификатор.
Ответ №1:
Имейте в виду, что разница между ошибкой во время выполнения и ошибкой синтаксического анализатора существенна в вашем случае и примере. Оператор:
test
является допустимым кодом. Несмотря на то, что этот оператор выдает a NameError
, когда виртуальная машина Python выполняет код, анализатор не будет знать, что ему на самом деле не было присвоено значение до анализа инструкции, поэтому это ошибка времени выполнения, а не синтаксическая ошибка.
Комментарии:
1. Спасибо! Я исправлю это, бросив
NameError
then2. @MaxLunar вы не можете выдать ошибку NameError, потому что откуда вы знаете, что код пользователя использует переменную, которой не было присвоено значение?
3. @MaxLunar Я думаю, что у вас здесь недопонимание. Является
x 1
ли код допустимым?4. Хм, если я отправлю сообщение, сообщающее пользователю, что его переменная еще не определена, если возникает ошибка NameError…
5. @MaxLunar Почему? Что, если
x
не определено? Или еслиx
это строка?