Python: модуль winreg: Windows 7: нет недопустимой ошибки HKEY - PullRequest
0 голосов
/ 20 июня 2011

Я столкнулся с проблемами при чтении значения реестра для модуля winth 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 голос
/ 20 июня 2011

Эта строка:

ParentKey = _winreg.DisableReflectionKey(ParentKey)

вернет None.Функция DisableReflectionKey не задокументирована как возвращающая что-либо (успех или неудача указываются тем, было ли вызвано исключение).Такая функция, которая ничего не возвращает, возвращает None неявно.Поскольку вы привязываете возвращаемое значение к ParentKey, эта переменная будет содержать None с этой точки.

Так что, конечно, последующий вызов

_winreg.QueryValueEx(ParentKey, 'DisplayName')

завершится неудачей, поскольку *Для работы 1014 * требуется определенный ключ (не None).

...