Python更新自定义模块后如何不重启VS2017重新导入解决无属性报错
报错原因
Python导入模块时会自动将模块缓存到sys.modules字典中,后续重复执行import source语句时,Python会直接读取缓存内容,不会重新加载修改后的source.py文件,因此新增的fun3无法被识别。
不重启IDE的解决方法
根据你使用的Python版本,选择对应重载方法即可:
Python 3.4及以上版本
使用内置importlib模块的reload方法完成模块重载:
import importlib import source # 执行重载操作 source = importlib.reload(source) # 重载后即可正常调用新增函数 source.fun3()
Python 2.x版本
Python 2中reload为内置函数,直接调用即可:
import source # 执行重载操作 source = reload(source) # 重载后即可正常调用新增函数 source.fun3()
注意事项
- 若你之前使用
from source import *或者from source import fun1, fun2的导入方式,重载模块后需要重新执行一次导入语句,才能将新增函数加载到当前命名空间。 - 你新增的
fun3代码存在语法错误:单引号包裹的字符串内部出现未转义的单引号,会导致source.py本身无法正常加载,修改为以下两种写法即可:# 写法1:转义内部单引号 def fun3(): print('Modi is India\'s Prime minister!!!!!!!') # 写法2:用双引号包裹字符串 def fun3(): print("Modi is India's Prime minister!!!!!!!") - 上述方法在Visual Studio 2017的Python交互环境、普通运行/调试场景下均生效,无需重启IDE。
内容的提问来源于stack exchange,提问作者Piyush Sharma
相关产品推荐
相关产品推荐

