我在ipython中使用--pdb
命令,因此當我在調試代碼時發生錯誤並顯示堆棧跟蹤。很多這些錯誤來自於調用numpy或pandas函數輸入錯誤。堆棧跟蹤從最新的框架開始,以這些庫的代碼開始。在後面的5-10次重複中,我實際上可以看到我做錯了什麼,其中90%的時間會立即顯現(例如,使用列表而不是數組調用)。發生異常後,在最早的堆棧幀中啓動python調試器
有什麼方法可以指定調試器最初啓動的是哪個堆棧幀?最初的堆棧幀或最初運行的python文件中的最新堆棧幀,或類似的。這對於調試將更有成效。
下面是一個簡單的例子
import pandas as pd
def test(df): # (A)
df[:,0] = 4 #Bad indexing on dataframe, will cause error
return df
df = test(pd.DataFrame(range(3))) # (B)
所得回溯,(A),(B),(C)加入,爲了清楚起見
In [6]: ---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-66730543fac0> in <module>()
----> 1 import codecs, os;__pyfile = codecs.open('''/tmp/py29142W1d''', encoding='''utf-8''');__code = __pyfile.read().encode('''utf-8''');__pyfile.close();os.remove('''/tmp/py29142W1d''');exec(compile(__code, '''/test/stack_frames.py''', 'exec'));
/test/stack_frames.py in <module>()
6
7 if __name__ == '__main__':
(A)----> 8 df = test(pd.DataFrame(range(3)))
/test/stack_frames.py in test(df)
2
3 def test(df):
(B)----> 4 df[:,0] = 4
5 return df
6
/usr/local/lib/python2.7/dist-packages/pandas/core/frame.pyc in __setitem__(self, key, value)
2355 else:
2356 # set column
-> 2357 self._set_item(key, value)
2358
2359 def _setitem_slice(self, key, value):
/usr/local/lib/python2.7/dist-packages/pandas/core/frame.pyc in _set_item(self, key, value)
2421
2422 self._ensure_valid_index(value)
-> 2423 value = self._sanitize_column(key, value)
2424 NDFrame._set_item(self, key, value)
2425
/usr/local/lib/python2.7/dist-packages/pandas/core/frame.pyc in _sanitize_column(self, key, value)
2602
2603 # broadcast across multiple columns if necessary
-> 2604 if key in self.columns and value.ndim == 1:
2605 if (not self.columns.is_unique or
2606 isinstance(self.columns, MultiIndex)):
/usr/local/lib/python2.7/dist-packages/pandas/indexes/base.pyc in __contains__(self, key)
1232
1233 def __contains__(self, key):
-> 1234 hash(key)
1235 # work around some kind of odd cython bug
1236 try:
TypeError: unhashable type
> /usr/local/lib/python2.7/dist-packages/pandas/indexes/base.py(1234)__contains__()
1232
1233 def __contains__(self, key):
(C)-> 1234 hash(key)
1235 # work around some kind of odd cython bug
1236 try:
ipdb>
現在理想情況下,我想在調試器開始在(B)的第二個最早的幀,或甚至在(A)。但絕對不在(C)默認情況下。
http:// stackoverflow。com/questions/37069323/stop-at-at-my-not-library-code可能是相關的。 –