3

私は基本的に次の質問と同じことをしようとしていPyObject_Printますが、「toupper()at0x776e0226」のエラーについて不平を言う呼び出しで実行時エラーが発生します

Python C API:PyEval_EvalCodeの使用

私のコードは次のとおりです。

int callExecFunction(const char* evalStr)
{
    PyCodeObject* code = (PyCodeObject*)Py_CompileString(evalStr, "pyscript", Py_eval_input);
    PyObject* global_dict = PyModule_GetDict(pModule);
    PyObject* local_dict = PyDict_New();
    PyObject* obj = PyEval_EvalCode(code, global_dict, local_dict);

    PyObject* result = PyObject_Str(obj);
    PyObject_Print(result, stdout, 0);
}

evalStrは"setCurrentFileDir()"、pModuleがエラーなしでスクリプトから以前に初期化され、次のコードとして機能していました:http: //docs.python.org/2/extending/embedding.html#pure-embedding

そして、ロードされたモジュールの中には次の機能があります:

def setCurrentFileDir():
    print "setCurrentFileDir"
    return "5"

eval関数呼び出しで何を見逃したか間違ったことをしましたか。PythonAPIを介して関数setCurrentFileDirを「直接」呼び出すことはできないことに注意してください。evalを使用する必要があります。

4

1 に答える 1

0

実際、これは問題なく機能します。しかし、関数が定義されていない古い実行のpythonスクリプトからpythonが構築した(そしてeclipseが私から隠れていた)はずのディレクトリに.pydファイルがあり、問題が発生しました。

ここで、問題が.pydファイルである可能性があるという考えが浮かびました。

python NameError:name'<anything>'は定義されていません(しかし、定義されています!)

于 2013-01-23T18:07:52.937 に答える