0

私は呼び出すクラスを持っています

traceback.extract_stack()

__init__()、しかし私がそうするときはいつでも、の値はtraceback.extract_stack()です[]

これが事実である可能性があるいくつかの理由は何ですか? より信頼できるトレースバックを取得する別の方法はありますか?

問題は、コードが Pylons で実行されていることだと思います。コントローラー アクションのコードを次に示します。

def test_tb(self):
    import traceback
    return a.lib.htmlencode(traceback.extract_stack())

それはただのウェブページを生成します

[] 

したがって、オブジェクトのコンストラクターにいることなどとは関係ないと思います。ある種のスレッドと traceback モジュールまたはそのようなものとの間の非互換性と関係があるのでしょうか?

4

3 に答える 3

1

__init__以下は、クラスのメソッドから呼び出されたときに動作する traceback.extract_stack() を示しています。動作しないことを示すコードを投稿してください。Python のバージョンを含めます。記憶から入力しないでください。私が行ったように、コピー/貼り付けを使用してください。

Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import traceback as tb
>>> tb.extract_stack()
[('<stdin>', 1, '<module>', None)]
>>> def func():
...     print tb.extract_stack()
...
>>> func()
[('<stdin>', 1, '<module>', None), ('<stdin>', 2, 'func', None)]
>>> class Klass(object):
...     def __init__(self):
...         print tb.extract_stack()
...
>>> k = Klass()
[('<stdin>', 1, '<module>', None), ('<stdin>', 3, '__init__', None)]
>>>

更新見て疑問に思う代わりにreturn a.lib.htmlencode(traceback.extract_stack())、パイプラインを利用してください。

(1)tb_stack = repr((traceback.extract_stack())チェックのために結果をログファイルに書き込みます

(2)return a.lib.htmlencode(some_known_constant_data)既知のデータが表示されると予想される場所に正しく表示されることを確認します。

于 2009-08-10T01:59:31.243 に答える
0

その理由は、誰かがプロジェクトで Pysco をオンにしたためであり、Psyco は traceback モジュールでうまく動作しませんでした。

于 2009-08-10T20:49:27.827 に答える
0

traceback モジュールのコードを見ると、sys.tracebacklimit がゼロに設定されている可能性がありますが、それはロングショットのように思えます...

于 2009-08-10T01:49:11.990 に答える