尝试自写模块时,它可能会在最初的几次错误中结束。
但是在修复这些错误时,ipython似乎没有注意到这一点。
是否有一个ipython命令来重新加载新模块? “清除”并不能解决问题。到目前为止,唯一有效的方法是“退出”并开始新的 session 。但这也意味着重做我到目前为止所做的一切。
还是我需要在模块中添加一些东西,使其在运行后杀死所有内部变量?
示例:
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
好,很简单。我在第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很烂。在大多数情况下,这意味着必须重新导入许多东西并执行几十个命令,以使我可以实际测试当前正在做的事情。
最佳答案
这不仅用于ipython
,而且通常在将Python
首次导入sys.modules
时将其缓存。因此,在首次导入之后,无论何时尝试导入,都将从sys.modules
获得缓存的模块对象。
要使Python重新加载模块对象而不必重新启动Python,以便反射(reflect)对模块所做的更改,应使用 reload()
built-in function (Python 2.x)或 importlib.reload()
(Python 3.x)。
Python 2.x-
<module> = reload(<module>)
例子 -
import module
module = reload(module) #This requires the module as it is, not a string.
Python 3.x-
import importlib
<module> = importlib.reload(<module>)
与上面的
Python 2.x
示例类似,只需使用importlib.reload()
而不是reload()
关于python - 如何让ipython知道对自写模块所做的更改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32269102/