6

コード:

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 の両方で、セグメンテーション エラーが発生します。なんで?


4

1 に答える 1

5

関数定義の本体が空であってはならないと思います。関数本体としてno-opステートメントを追加して、コードをテストしました。

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

そして、セグメンテーション違反はなくなりました。出力は次のとおりです。

<0x022DB3F0の関数foo>

私が正しければ、これはastモジュールのバグである可能性があります。これは、空の本体をチェックする必要があるためです。

于 2011-07-21T15:56:34.397 に答える