pl/python 类型错误:序列项 21:期望字符串,找到整型
朋友们:在PostgreSQL的plpython中,我正在尝试对一个文本块'data'进行反复的搜索和替换。
我使用re-sub来定义一个匹配模式,然后调用一个叫'replace'的函数来完成替换工作。我的目标是让'replace'函数不断被调用,因为有些替换会生成新的“规则”匹配,这些匹配又需要进一步的替换。
一切都进行得很顺利,经过很多次替换后,我成功地触发了第二轮的循环。但是,直到某个原因导致正则表达式的模式返回一个整数(?)——显然是在找不到匹配的时候... ?? 我尝试检查'None'和'0',但都没有成功。有没有什么想法?
data = (a_huge_block of_text)
# ====================== THE FUNCTION ==============
def replace(matchobj):
tag = matchobj.group(1)
plpy.info("-------- matchobj.group(1), tag: ", tag)
if matchobj.group(1) != '':
(do all the replacement work in here)
# ====================== END FUNCTION ==============
passnumber = 0
# If _any_ pattern match is found, process all of data for _all_ matches:
while re.search('(rule:[A-Za-z#]+)', data) != '':
# BEGIN repeat loop:
passnumber = passnumber + 1
plpy.info(' ================================ BEGIN PASS: ', passnumber)
data = re.sub('(rule:[A-Za-z#]+)', replace, data)
plpy.info(' =================================== END PASS: ', passnumber)
上面的代码看起来运行得不错,进入了第二次迭代... 然后:
ERROR: TypeError: sequence item 21: expected string, int found
CONTEXT: Traceback (most recent call last):
PL/Python function "myfunction", line 201, in <module>
data = re.sub('(rule:[A-Za-z#]+)', replace, data)
PL/Python function "myfunction", line 150, in sub
PL/Python function "myfunction"
我也尝试过re.search (...) != '' 以及 re.search (...) != 'None' --- 结果都是一样。我意识到我必须找到一种语法来以某种可读的形式表示匹配对象...
1 个回答
0
这个问题的答案其实很简单,当然,前提是你知道Python!(我不知道!)
为了启动重复循环,我之前是这样测试的:
while re.search('(rule:[A-Za-z#]+)', data) != '':
我也试过这个,但同样不行:
while re.search('(rule:[A-Za-z#]+)', data) != 'None':
当然,可以处理None的结果,但其实不需要引号。就是这么简单:
while re.search('(rule:[A-Za-z#]+)', data) != None:
一旦你知道了,这一切都变得很简单!