如何在python中取消缓存导入的模块?
这真把我吓坏了。我的项目看起来像这样如何在python中取消缓存导入的模块?,python,Python,这真把我吓坏了。我的项目看起来像这样 . |-- main.py |-- classes | |-- __init__.py | |-- exceptions.py 在那些exceptions.py中,我最初创建了一个名为SecurityError的异常: class SecurityError(Exception): pass 我使用class.exceptions import*将文件包含在main.py中,而SecurityError在我刚刚raise时正常工作
.
|-- main.py
|-- classes
| |-- __init__.py
| |-- exceptions.py
在那些exceptions.py
中,我最初创建了一个名为SecurityError
的异常:
class SecurityError(Exception):
pass
我使用class.exceptions import*将文件包含在main.py
中,而SecurityError
在我刚刚raise
时正常工作
之后,我还添加了FilesystemError
,但无论何时使用它,我都会得到:
未定义全局名称“FilesystemError”
我试图删除classes
目录中的*.pyc
文件,但没有效果。对exceptions.py的任何更改都不会生效,包括使文件无效的任何荒谬更改:
class FileFOO BAR BAZ systemError(Exception):
pass
class SecurityErr foo bar bazor(Exception):
pass
该程序的行为方式仍然类似于自第一次运行以来该文件从未更改。我不认为这种行为与直观编程有任何关系——如果有缓存,它应该在那个目录中
我直接从命令行运行python:
C:\programing\python\MyProject>py -2 main.py
未定义全局名称“XXX”形式的混淆错误通常意味着您正在隐藏标准库模块。您必须重命名您的异常
模块。您是如何运行/测试的?自第一次运行以来,您是否在同一个python会话中进行测试?我想我应该提到这一点-我只是运行C:\\\每次在WIndows命令行中使用MyProject>py-2 main.py
。也就是说,我肯定会退出这个过程,除非它在后台分叉并持续。您如何“使用”FilesystemError
?消息global name…
表示您在某处将其称为全局名称。您是在exceptions.py中执行此操作的吗?如果没有,您是否确实从尝试使用它的模块导入了它?您可以在问题中包含完整的堆栈跟踪吗?请尝试执行从类导入异常
,然后执行打印异常。\uu\u文件
以查看文件从何处导入。有一个名为异常
的内置Python模块。如果您使用的是from classes.exceptions import*
,则不应导入此项,但如果您在任何地方执行类似于import exceptions
的操作,则可能会导致问题。当我重命名它、运行程序并重新重命名它时,此项功能会正常工作。所以我可能在跟踪一些事情,但问题的原因并不简单。另外,我使用classes.exceptions
可以很好地解决任何名称冲突问题。