Python正则表达式类型错误

4 投票
1 回答
7699 浏览
提问于 2025-04-16 00:04

我正在写我的第一个Python程序,遇到了一个关于正则表达式的问题。我正在使用正则表达式来查找注册表键中的特定值。

import _winreg
import re

key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F83216020FF}")

results=[]
v = re.compile(r"(?i)Java")

try:
    i = 0
    while 1:
        name, value, type = _winreg.EnumValue(key, i)
        if v.search(value):
         results.append((name,value,type))
        i += 1
except WindowsError:
    print

for x in results:
 print "%-50s%-80s%-20s" % x

我遇到了以下错误:

exceptions.TypeError: 期望的是字符串或缓冲区

我可以使用“name”这个变量,正则表达式运行得很好。例如,如果我做以下更改,正则表达式就不会报错:

v = re.compile(r"(?i)DisplayName")

if v.search(name):

谢谢大家的帮助。

1 个回答

3

关于EnumValue的说明提到,它返回的是一个包含三个部分的元组:第一个是字符串,第二个是可以是任何值类型的对象,第三个是一个整数。正如错误信息所说,你必须传入一个字符串或者一个缓冲区,这就是为什么v.search(value)会失败的原因。

应该可以使用v.search(str(value))来将value转换成字符串,这样就能正常工作了。

撰写回答