Проверка, содержит ли строка допустимый код Python

#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 then

2. @MaxLunar вы не можете выдать ошибку NameError, потому что откуда вы знаете, что код пользователя использует переменную, которой не было присвоено значение?

3. @MaxLunar Я думаю, что у вас здесь недопонимание. Является x 1 ли код допустимым?

4. Хм, если я отправлю сообщение, сообщающее пользователю, что его переменная еще не определена, если возникает ошибка NameError…

5. @MaxLunar Почему? Что, если x не определено? Или если x это строка?