Python: winreg模块:Windows 7:None不是有效的HKEY错误
我在用winreg模块读取Windows 7的注册表值时遇到了一些问题。有没有什么建议可以解决这个问题?
代码:
try:
ParentKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
i = 0
while 1:
name, value, type = _winreg.EnumValue(ParentKey, i)
print repr(name),
i += 1
except Exception as e:
print(Exception(e))
ParentKey =_winreg.DisableReflectionKey(ParentKey)
temp = _winreg.QueryValueEx(ParentKey, 'DisplayName')
temp1 = _winreg.QueryValueEx(ParentKey, 'DisplayVersion')
temp2 = _winreg.QueryValueEx(ParentKey, 'Publisher')
temp3 = _winreg.QueryValueEx(ParentKey, 'InstallLocation')
display = str(temp[0])
display_ver=str(temp1[0])
display_p=str(temp2[0])
display_loc=str(temp3)
print ('Display Name: ' + display + '\nDisplay version: ' + display_ver + '\nVendor/Publisher: ' + display_p +'\nRegkey: ' + display_loc +'\nInstall Location: ' )
输出:
[Error 259] No more data is available
Traceback (most recent call last):
File "C:\Users\Test\workspace\Pythontests\src\test.py", line 24, in <module>
temp = _winreg.QueryValueEx(ParentKey, 'DisplayName')
TypeError: None is not a valid HKEY in this context
**strong text**
1 个回答
1
这一行:
ParentKey = _winreg.DisableReflectionKey(ParentKey)
会返回 None
。这个函数 DisableReflectionKey
没有说明会返回任何东西(它的成功或失败是通过是否抛出异常来判断的)。像这样的函数如果不返回任何值,默认情况下会返回 None
。因为你把返回的值绑定给了 ParentKey
,所以从那时起,这个变量的值就是 None
。
所以,接下来的调用:
_winreg.QueryValueEx(ParentKey, 'DisplayName')
会失败,因为 QueryValueEx
需要一个已定义的键(不能是 None
)才能正常工作。