2017-11-19 13 views
2

私はipdbとyieldで作業しています。私は、yieldがipdbでそれを使用するときに期待どおりに動作しないことに気付きました。具体デバッグモードでイールド作業を行うには?

、これを解決する方法をipdb(及び「n」はキーボードで charcterは単に代わりに関数から戻るの降伏コマンドをスキップ押す)

def cats(): 
    print(-1) 
    yield 
    for i in range(4): 
     print(i) 
     yield 

import ipdb 
ipdb.set_trace() 
x = cats() 
next(x) 
next(x) 
next(x) 

を用いてデバッグ中、このコード?彼らは猫()内に停止し、何も存在しないため

答えて

0

両方ipdbとPDBはyield後の声明を必要としています。私は正直にipdbのようなその誘導体をPDBのコンテキストで、このための解決策を考えることはできません

def cats2(): 
     if len(__file__) > 5: 
      import pdb; pdb.set_trace() 
cats2() 

:興味深いもののそのPDBが言うには、リターンに停止します。

トレパンデバッガーtrepan3k(python 3用)とはこの問題を抱えません。彼らはyieldと同じようにpdbがreturnを扱います。そして、このようなことのために、pdbが処理しない多くのエッジケースを修正して、これらのデバッガを作成しました。

+0

猫は一つのことです – avitheavi

関連する問題