pl / python TypeError:序列项21:期望的字符串,找到int

时间:2011-09-09 01:46:03

标签: python postgresql plpython

朋友:在PostgreSQL plpython中,我试图在文本块“数据”中进行迭代搜索/替换。

使用re-sub定义匹配模式,然后调用函数'replace'来完成工作。 目标是重复调用'replace'函数,因为一些替换会产生进一步的'规则'匹配,这需要进一步替换。

通过许多替换,所有这些都很有效 - 我正在设法触发重复循环的第二遍。然后,直到某些东西导致正则表达式模式返回一个整数(?) - 显然在它找不到匹配的点......?我试过测试'无'和'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(...)!='无'---结果相同。 我确实意识到我必须找到以某种可读形式表示匹配对象的语法......

1 个答案:

答案 0 :(得分:0)

当然,一旦你了解Python,答案就变得非常简单了! (我没有!)

为了启动重复循环,我一直在做这个测试:

while re.search('(rule:[A-Za-z#]+)', data) != '':

还试过这个,这也行不通:

while re.search('(rule:[A-Za-z#]+)', data) != 'None':

当然,可以捕获无结果,但不需要引号。就这么简单:

while re.search('(rule:[A-Za-z#]+)', data) != None:

一旦你知道,这一切都很简单!