2011-07-26 10 views
2

公式ドキュメントによると、PyImport_AppendInittabは失敗した場合-1を返します。しかし、なぜこの関数が失敗するのかを指定するものではありません。PyImport_AppendInittabはどのように失敗しますか?

プログラマーの間違い(間違った引数、適切なタイミングで呼び出されていないなど)や、他のいくつかの要因が原因で失敗する可能性があるかどうかを知りたいのですがプログラマーのコントロール(Pythonがインストールされていないなど)

私はアサートまたは例外でこれを処理する必要があるかどうかを知りたいので、私は尋ねています。また、例外を処理する必要がある場合は、なぜ関数呼び出しが失敗したのかを指定するPython APIからエラーメッセージをキャッチする方法はありますか?

答えて

5

文書によれば、PyImport_AppendInittab()PyImport_ExtendInittab()の都合の良いラッパーであり、 "テーブルを拡張できなかった場合" -1を返します。さらに、PyImport_ExtendInittab()は、-1 "内部テーブルを拡張するために不十分なメモリを割り当てることができた場合"を返します。どちらの関数も "Py_Initialize()より前に呼び出す必要があります"。

したがって、これらの関数は、プログラムのメモリが不足している場合にのみ失敗します。私は、既存のモジュールと同じ名前の組み込みモジュールを登録しようとしたときなど、無効な引数が与えられたときにも失敗すると思います。組み込みモジュールの名前はよく知られているため、後者の場合は簡単に回避できます。

要約すると、-1の戻り値が「メモリ不足」を意味すると仮定することができます。これは、関数が処理の早い段階(Py_Initialize()の前)で呼び出され、必要なメモリ量モジュールテーブルの方がやや小さいです。

PyImport_AppendInittab()が失敗した場合、Pythonはエラー文字列を提供しません。有意義な例外をスローするには、現時点で知っている情報を報告するだけです。モジュールMODULENAMEをインタプリタの組み込みモジュールに追加できませんでした。

関連する問題