3

奇妙な動作をするコードがあります。

最初に、C ライブラリの Python バインディングであるモジュールをインポートします。

try:
    import pyccn
except:
    print "ERROR: PyCCN is not found"
    exit(1)

コードの後半で、pyccn モジュールを使用してかなり多くのことを行いましたが、(ほぼ) 期待どおりに動作していました。かなり長い間正しく動作した後、エラーが表示されます:

 Traceback (most recent call last):
   File "./ndn-ls-keys.py", line 185, in upcall
     if kind == pyccn.UPCALL_CONTENT_UNVERIFIED:
 AttributeError: 'NoneType' object has no attribute 'UPCALL_CONTENT_UNVERIFIED'

つまり、「pyccn」は NoneType です!! しかし、それは機能していました。エラーが発生する前に、185行目を含む同じ関数が複数回呼び出されたことを意味します。そして、エラーは一貫して発生します。「pyccn」は再定義せず、「pyccn.foo()、pyccn.bar() など」を使用しただけです。

これが発生する可能性のある理由は何ですか?

PSエラーはスクリプトの最後に発生します。そこに time.sleep(10) を配置すると、スリープ後に発生します...

ありがとう!

4

1 に答える 1

2

私はどういうわけかこの問題を解決しました。元々、PyCCNのインポートのすぐ下に、他に2つのインポートがあります。

    import xml.etree.ElementTree as ET
    import time

したがって、インポートはこのファイルに対してグローバルです。

これらの2つのインポートを実際に使用される関数内に移動すると、問題は解決しました。移動が唯一の変更であり、この修正の背後にある理由はわかりません。

おそらく、pyccnモジュールの問題が原因で、インポート間に競合が発生していますか?(私は標準ライブラリがこの問題の原因ではないと思います)。

于 2013-03-06T04:12:16.767 に答える