--pdb
명령을 ipython과 함께 사용하므로 코드를 디버깅 할 때 오류가 발생하면 스택 추적을 표시합니다. 이러한 많은 오류는 잘못된 입력으로 numpy 또는 pandas 함수를 호출 할 때 발생합니다. 스택 추적은 이러한 라이브러리의 코드에서 최신 프레임부터 시작합니다. 나중에 up
명령을 5-10 번 반복하면 내가 실제로 잘못한 것을 실제로 볼 수 있습니다. 즉, 90 %의 시간이 즉시 명백해질 것입니다 (예 : 배열 대신 목록으로 호출).예외 발생 후 가장 오래된 스택 프레임에서 파이썬 디버거를 시작하십시오.
디버거가 처음 시작할 스택 프레임을 지정하는 방법이 있습니까? 가장 오래된 스택 프레임 또는 파이썬 파일의 최신 스택 프레임이 처음 실행되거나 유사합니다. 이것은 디버깅에 훨씬 더 생산적 일 것입니다. 여기
간단한 예 추적을 생성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)는 이제 이상적으로, I는에서 시작하는 디버거하고자 명료
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-exception-in-my-not-library-code가 관련되어있을 수 있습니다. –