Python: получение ошибки сегментации при использовании compile / eval - PullRequest
6 голосов
/ 21 июля 2011

Код:

import ast

globalsDict = {}

fAst = ast.FunctionDef(
    name="foo",
    args=ast.arguments(args=[], vararg=None, kwarg=None, defaults=[]),
    body=[], decorator_list=[])

exprAst = ast.Interactive(body=[fAst])
ast.fix_missing_locations(exprAst)
compiled = compile(exprAst, "<foo>", "single")
eval(compiled, globalsDict, globalsDict)

print globalsDict["foo"]

При использовании CPython и PyPy возникает ошибка сегментации. Почему?


1 Ответ

5 голосов
/ 21 июля 2011

Полагаю, в определении вашей функции не должно быть пустого тела.Я проверил ваш код, добавив оператор no-op в качестве тела функции:

fAst = ast.FunctionDef(
    # ...
    body=[ast.Pass()],
    # ...

И ошибка сегментации исчезла;вывод:

<function foo at 0x022DB3F0>

Если я прав, это может быть ошибка в модуле ast, так как он должен проверять наличие пустого тела.

...