尝试使用自写模块时,最初几次可能会以错误结束。如何让ipython意识到对自写模块所做的更改?
但是当修复这些错误时,ipython似乎没有注意到这一点。
是否有一个ipython命令来重新加载新模块? '明确'并不能解决问题。到目前为止,唯一可行的是“退出”并开始新的会话。但这也意味着重做我到目前为止所做的一切。
或者我需要添加一些东西到模块,它会杀死所有的内部变量运行后?
例子:
from mymodule import readCSVts
import pandas as pd
data = readCSVts('file.csv')
TypeError Traceback (most recent call last)
<ipython-input-158-8f82f1a78260> in <module>()
----> 1 data = readCSVts('file.csv')
/home/me/path/to/mymodule.py in readCSVts(filename)
194 Cons_NaNs=hydroTS[(hydroTS.level.isnull())&(hydroTS.level.shift().isnull())&(hydroTS.level.shift(periods=2).isnull())]
195 #This is a pandas dataframe containing all rows with NaN
196 Cons_NaNs_count = len(Cons_NaNs)
197 Cons_NaNs_str = str(Cons_NaNs_count)
198 Cons_NaN_Name_joiner = [current_csv,';',Cons_NaNs]
--> 199 Cons_NaN_Name_str = ''.join(Cons_NaN_Name_joiner)
TypeError: sequence item 2: expected string, DataFrame found
OK,这很容易。我在第198行写了一个错字,并且写了Cons_NaNs
而不是Cons_NaNs_str
,因此我得到了试图用字符串连接数据框的明显错误。
但它在mymodule.py
文件固定后,我得到以下(缩短)错误:
197 Cons_NaNs_str = str(Cons_NaNs_count)
198 Cons_NaN_Name_joiner = [current_csv,';',Cons_NaNs_str]
--> 199 Cons_NaN_Name_str = ''.join(Cons_NaN_Name_joiner)
TypeError: sequence item 2: expected string, DataFrame found
放眼回溯,IPython中很清楚的源文件中所做的更改,它显示我修复了错别字_str
的错字,但它仍然给出了一个错误,在第一眼看来似乎是不可能的。运行clear
并重新导入所有内容后,它会显示相同的行为。
所以,为了确保我没有在某个地方犯下一个愚蠢的错误,我在ipython中一步一步地去了整个模块。而每一个引导我到那个点的变量的行为都如预期的那样。
Cons_NaNs
是一个数据帧,Cons_NaNs_count
是一个整数,Cons_NaNs_str
是一个字符串。
所以我退出ipython,重新启动它并重新导入所有内容,现在它可以正常工作。但是不得不退出ipython。大多数情况下,这意味着必须重新导入数十件事并执行几十个命令,才能真正测试我目前正在进行的工作。
您是否试过['reload'](https://docs.python.org/2/library/functions.html#reload)? – jonrsharpe