当我注意到一些有趣的东西时,我对python很新,并且正在玩代码。
文件atomicPast.rb版本1:
import datetime
datatime.now()
我想从python提示符(不是Windows提示符)运行此代码。我就是这样做的:
>>import sys
>>sys.path.append("C:\\Users\\Myname\\Desktop\\Python")
>>import atomicPast
我得到时间了。但是,执行import atomicPast再次无法正常工作,因为它已经导入。所以我发现了这个:
>>del sys.modules['atomicPast']
对我来说,这是一个不重要的,它的行为就像它,因为后续的import atomicPast会给我我的时间(只要它再次无效)。但是,我希望能够执行import atomicPast而不用担心它是否已经不被导入。我决定将unmport位添加到我的代码末尾以充当清理。
文件atomicPast.rb版本2:
import sys, inspect, os
print datetime.datetime.now()
del sys.modules[ inspect.getfile(inspect.currentframe())[0:-3] ] #1
在#1中,我得到没有扩展名(atomicPast)的文件名,并将其传递给del sys.modules [...]。
然而,在这一点上,atomicPast并没有完全导入(我猜?)所以试图不引入它并没有真正意义并引发异常:
导入atomicPast 2014-10-31 10:42:32.368000 Traceback(最近一次调用最后一次): 文件"",第1行,in ImportError:在sys.modules中找不到已加载的模块atomicPast
有趣的是,unmport工作,我可以重复执行import atomicPast。
我以为我可以处理异常并摆脱错误打印。
在文件中:
...
try:
del sys.modules[ inspect.getfile(inspect.currentframe())[0:-3] ] #1
except ImportError:
pass
这不起作用。我仍然得到同样的例外。
进一步分析:
try:
#del sys.modules[ inspect.getfile(inspect.currentframe())[0:-3] ]
import cowabunga
except ImportError:
print "in except"
以上按预期工作,导入cowabunga会导致ImportError并被捕获。
所以我坚持认识到某些情况下的某些异常可能无法捕获。
答案 0 :(得分:1)
不要使用import来执行命令或调用函数。正确的方法是写这样的东西: atomicPast.py
import datetime
def time_now():
print datetime.now()
然后从python控制台只需导入atomicPast()然后time_now() 导入命令用于导入库不执行代码,它不能用作php导入。在这里阅读 https://docs.python.org/3/reference/import.html 还有https://docs.python.org/2/library/sys.html#sys.modules
我的建议是只有在你知道自己在做什么的情况下才能使用sys.modules。