我有两个python脚本,一个具有我定义的所有功能( functions.py ),另一个只运行这些功能( running_functions.py )。
我使用from functions import*
我的问题是当我使用execfile('running_functions.py')
将 running_functions 运行到python控制台时,最初像魅力一样工作,但如果我不关闭python会话并对其进行一些修改 functions.py 中的一个函数(例如,更改getLabels()
占用的参数数量(从4到5)然后保存然后再次运行 running_functions.py 使用相同的命令或当我调用getLabels()
时出现错误:
使用execfile()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "running_functions.py", line 82, in <module>
predict_labels = getLabels(pred_labels, ids_tr ,labels_tr,filenames_tr, filenames_ts)
TypeError: getLabels() takes exactly 4 arguments (5 given)
调用函数
>>> predict_labels = getLabels(pred_labels, ids_tr ,labels_tr,filenames_tr, filenames_ts)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: getLabels() takes exactly 4 arguments (5 given)
要让它再次运行,我必须关闭python会话,然后再次运行execfile()
或重命名functions.py
或使用修改过的函数执行小pythons脚本。
这非常烦人,因为所有代码大约需要10到15分钟,而且我不喜欢有很多小脚本。那么,我该如何避免这个错误呢? 我不希望每次会话都关闭,并且不想在每个功能pickle模块中使用。导入函数的方式有误吗?为什么python会返回此错误?对不起这个愚蠢的问题
答案 0 :(得分:5)
我建议略过how python imports work。一般来说,使用像from module import *
这样的glob导入被认为是不好的做法。它不透明,很难利用reload
。
我建议您重写代码以执行以下操作:
import functions
functions.getLabels(...)
然后在更改getLabel之后,您可以从shell运行以下命令:
reload(functions)
这将重新导入您的更改,而无需重新启动python内核。