2011-06-20 6 views
0

Windows 7のwinth winregモジュールのレジストリ値を読み取っているときに問題が発生しました。Python:winregモジュール:Windows 7:有効ではありませんHKEYエラー

コード:

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

このライン:

ParentKey = _winreg.DisableReflectionKey(ParentKey) 

Noneを返します。関数DisableReflectionKeyは、何かを返すとして文書化されていません(成功か失敗かは、例外が発生するかどうかによって示されます)。何も返さない関数は暗黙的にNoneを返します。戻り値をParentKeyにバインドするので、その変数はその時点からNoneを保持します。 QueryValueExが動作するように定義されたキー(ないNone)を必要とするため

ので、もちろん後続の呼び出し、

_winreg.QueryValueEx(ParentKey, 'DisplayName') 

は失敗します。

+0

入力にサンタさんに感謝します。 – tester

関連する問題