2

Pythonスクリプトをデバッグしています。IndexErrors をスローしているセクションが 1 つあります。その理由を調べるために pdb を使用したいと考えています。これが私のスクリプトです:

try:
    # do stuff that throws an IndexError
except IndexError:
    import pdb; pdb.set_trace()

スクリプトを実行すると、行でクラッシュしますimport pdb; pdb.set_trace()。私が得るトレースバック:

Traceback (most recent call last):
File "myfile.py", line 113, in <module>
import pdb; pdb.set_trace()
File "/usr/lib/python2.7/pdb.py", line 10, in <module>
import bdb
File "/usr/lib/python2.7/bdb.py", line 3, in <module>
import fnmatch
ImportError: No module named fnmatch

import pdbimport bdb、およびimport fnamatchすべてが Python インタープリターでエラーなく動作します。私はこれをどこから始めるべきかさえ知りません。

2016 年 6 月 8 日の更新: この質問は最近、再び注目を集めました。残念ながら、私はこれをまったく覚えておらず、解決策が何であったか、あるいは私が何に取り組んでいたかさえ覚えていません. (良い質問です!) コメントへの返信を怠った理由がわかりません。この時点で、解決されたと思います-過去4年間でpdbを正常に使用しました:D

この時点で言えることは、おそらく Ubuntu (おそらく 12.04) を使用していたということです。

私はおそらくvirtualenvを使用していたでしょう。または、少なくとも virtualenv を使用していると思いました。/home/foo/.virtualenvs/bar/...スタック トレースがではなくのようなものを参照することを期待します/usr/lib/python2.7

リーチかもしれませんが、ピップがデフォルトで常に使用されるとは限らなかったことを思い出し--no-site-packagesます。おそらく、システムの python にインストールされた何かが、私の virtualenv の何かと衝突したのでしょう。どこかに絶対パスがありますか、それとも何らかの方法で PYTHONPATH をいじっていますか?

これはリーチになり始めていますが、自分がどのようなシナリオに陥ったかを想像するのに苦労しています. これは少なくとも私にはもっともらしいように思えます:

  • システムpythonにパッケージXをインストールしました。
  • --no-site-packagesなしで virtualenv を作成したため、X が virtualenv に取り込まれました。
  • X と競合する virtualenv に Y をインストールしました。
  • virtualenv のターミナル A でスクリプトを実行していたところ、エラーが発生しました。
  • ターミナル B を開き、virtualenv をアクティブにするのを忘れたため、別のインタープリターを使用することになりました (これは @DSM の功績によるものです)。
  • virtualenv (および仮想的な競合) がなければ、正常にimport pdb動作します。

申し訳ありませんが、この質問は引き続き関心を集めているようです。私は直感と推測しかありません。今日これに遭遇した場合は、スタック トレースの場所が想定どおりであることを確認することをお勧めします。その場合は、そこに参照されているファイルが実際に存在し、損傷していないように見えることを確認してください。

それがなければ、新しい virtualenv を試してみます。

この問題が発生し、修正を見つけた場合は、投稿してください。あなたの答えを喜んで受け入れます。

4

0 に答える 0