मैं ipython के साथ --pdb
कमांड का उपयोग करता हूं, इसलिए जब मैं डीबगिंग कोड और त्रुटि उत्पन्न करता हूं तो यह एक स्टैक ट्रेस दिखाता है। इनमें से बहुत सी त्रुटियां खराब इनपुट के साथ 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)
ट्रैस बैक परिणामस्वरूप, (ए), (बी) है, (सी) स्पष्टता के लिए
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>
जोड़ा अब आदर्श, मैं डिबगर चाहते में शुरू करने के लिए होगा (बी), या यहां तक कि (ए) पर दूसरा सबसे पुराना फ्रेम। लेकिन निश्चित रूप से नहीं (सी) जहां यह डिफ़ॉल्ट रूप से जाता है।
http: // stackoverflow।कॉम/प्रश्न/37069323/स्टॉप-ऑन-अपवाद-इन-मेरे-लाइब्रेरी-कोड से संबंधित नहीं हो सकता है। –