Как проверить, является ли строка допустимым кодом Python (ошибка времени выполнения) - PullRequest
1 голос
/ 27 марта 2019

Есть ли возможность проверить ошибки во время выполнения? Из строки ясно, что pri1nt является функцией, и она не определена в этой строке.

import ast

def is_valid_python(code):
  try:
     ast.parse(code)
  except SyntaxError:
     return False
  return True

mycode = 'pri1nt("hello world")'

is_valid_python(mycode) # true

exec(mycode) # NameError: name 'pri1nt' is not defined

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Попробуйте использовать BaseException вместо SyntaxError.Это будет проверять каждый тип ошибки Python, включая NameError.Кроме того, поскольку ast.parse никогда не вызывает никаких ошибок, вместо этого следует использовать exec.

Так должно быть так:

def is_valid_python(code):
  try:
     exec(code)
  except BaseException:
     return False
  Return True

mycode = 'pri1nt("hello world")'

is_valid_python(mycode) # false
0 голосов
/ 27 марта 2019

может быть, что-то вроде этого?

import subprocess

script_string = "prnt(\"Hello World!\")"    
proc = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
res = proc.communicate(bytes(script_string, "UTF-8"))

что он в основном делает, передает строку в интерпретатор python.если нет ошибки, тогда строка script_string действительна.

Редактировать: res будет содержать (stdout_data, stderr_data) (см. https://docs.python.org/3/library/subprocess.html#subprocess.Popen.communicate)

...