一线字符串迭代器; AttributeError:“发电机”对象没有属性“替换”

时间:2018-08-08 17:09:18

标签: python python-3.x

现在可以使用:

for x in clean_spaces:

    final_qry = final_qry.replace(x, ' ')`

clean_spaces是正则表达式组提取的多字符空白值(\s\s+)的列表,这些值将在输出字符串中用单个空格替换。

final_qry是通过其他操作修改的SQL查询。

我希望有一个更简洁的单行语句,如下所示:

final_qry = (final_qry.replace(x, ' ') for x in clean_spaces)

但是,当尝试使用它和它之后的类似语句时,出现以下错误:

AttributeError: 'generator' object has no attribute 'replace'

是否有一种方法可以将for ... in ...:... \ n ... [action]语句合并为一行而不会出现此错误?

1 个答案:

答案 0 :(得分:0)

之后

  

final_qry =(final_qry.replace(x,'')for clean_spaces中的x)

final_qry不再是以前的SQL查询,而是生成器表达式。

考虑一下此会话(简化):

$ python
>>> clean_spaces="cd"
>>> final_qry="abcdefg"
>>> final_qry
'abcdefg'
>>> final_qry = (final_qry.replace(x, ' ') for x in clean_spaces)
>>> final_qry
<generator object <genexpr> at 0x7f85d2828960>
>>> list(final_qry)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <genexpr>
AttributeError: 'generator' object has no attribute 'replace'

我认为您将无法通过这种方式解决您的问题。使用@laylog提出的解决方案:

final_qry = reduce((lambda x, y: x.replace(y, ' ')), clean_spaces, final_qry)