Nascent_Notes,不错的脚本!我尝试加载uu
(命令 3)并打印已加载模块的列表(命令 2),它们似乎都工作正常。
但是,如果我尝试“浏览模块”(命令 4),则会收到以下错误:
HlpWiz>>> 4
What module do you want to look more into?: uu
*An error occurred - probably because the module isn't loaded or is misspelled*
尝试运行
#!/usr/bin/env python
import sys
__import__('uu')
print(sys.modules['uu'])
print(dir(uu))
你应该得到NameError: name 'uu' is not defined
.
所以看起来虽然__import__
成功导入了uu
模块,但它并没有添加uu
到全局命名空间中——模块uu
无法通过变量名访问uu
。但是可以通过以下方式访问它sys.modules
:
因此,改变
var_mod = input("What module do you want to look more into?: ")
print "\n attempting to browse... please wait!"
time.sleep(2)
browse_mod(zlib = var_mod)
到
var_mod = raw_input("What module do you want to look more into?: ")
print "\n attempting to browse... please wait!"
time.sleep(2)
browse_mod(zlib = sys.modules[var_mod])
不仅使用raw_input
比input
(用户将无法执行意外/恶意命令)更安全,而且还raw_input
可以在这里做你想做的事。
稍微注意一下,您还可以更改
i = 1
for line in sample:
print i, line
i = i + 1
更蟒蛇
for i,line in enumerate(sample):
print i+1, line
编辑:
sys.modules 是一个字典(字典的缩写)。字典就像电话簿——你给它一个名字(更好地称为“键”),它返回一个电话号码(或更一般地说,一个“值”)。
对于 sys.modules,键是模块名称(字符串)。这些值是模块对象本身。
您可以使用括号表示法访问 dict 中的值。所以uu
只是一个字符串,但是
sys.modules['uu']
是模块uu
。
您可以在此处阅读有关 dicts 的完整故事:http: //docs.python.org/tutorial/datastructures.html#dictionaries