我追查了一個錯誤,其中io.open()
應該已經通過'utf-8'
而不是'utf8'
。下面的最小可執行代碼。爲什麼IPython回溯沒有顯示行號,爲什麼pdb既沒有報告錯誤是io.open
函數調用,也沒有報告io.open
代碼中的任何內容?我可以用pdb
或IPython調試器或Canopy debugger分層做什麼,以便更輕鬆地調試該調試器?如何在Python中進行調試:爲什麼沒有pdb進入函數調用?
檢查我的IPython版本也令人困惑。 Canopy包管理器報告已安裝ipython 4.0.0-3
和ipython4 4.0.0-9
,但import IPython
後跟IPython.version_info
評估爲(2, 4, 1, '')
。
在樹冠代碼編輯器my_module.py
:
import io
def my_function(filename):
with io.open(my_other_function(filename), u'r', u'utf8')
def my_other_function(text):
return u'modified' + text
在IPython的會話:
In []: import pdb
In []: import my_module
In []: my_module.my_function(filename)
-------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-4c50d9f6cb5c> in <module>()
----> 1 my_module.my_function(filename)
C:\my_module in my_function(filename)
TypeError: an integer is required
In []: pdb.pm()
> c:\users\bbrown\documents\github\canvasapi-python\capi\my_module.py(3)my_function()
-> with io.open(my_other_function(filename), u'w', u'utf8') as filehandle:
(Pdb) up
> <ipython-input-14-f6d6cc2c1670>(1)<module>()
-> my_module.my_function('testjunk')
(Pdb) down
> c:\users\bbrown\documents\github\canvasapi-python\capi\my_module.py(3)my_function()
-> with io.open(my_other_function(filename), u'w', u'utf8') as filehandle:
(Pdb) args
filename = testjunk
(Pdb) down
*** Newest frame
鑑於'utf-8'
工作正常,作爲一個參數,TypeError
是令人驚訝的從open
代碼中,除非發端,但open
的呼叫沒有放在堆棧上,至少沒有從pdb
導航。感謝您幫助我和其他人學習如何更高效地進行調試!
編輯顯示'my_other_function'。我在初次寫作時將它從問題中刪除了,因爲我知道io.open的錯誤,但是我的問題最終是關於如何調試,而嵌入的調用是讓我對它片刻不透明的原因。 –
關於您的IPython版本... Canopy GUI的IPython shell使用IPython 2.4.1,它與Package Manager中安裝到User venv中的IPython分開。 Package Manager安裝的IPython可以在Canopy Terminal/Command Prompt中進行訪問。 「ipython4」包是在Canopy GUI之外使用'import IPython'導入的,並且是「ipython」包的依賴。這個方案是爲了維護需要ipython