相关疑难解决方法(0)

pylint 1.4报告所有C扩展上的E1101(无成员)

我们一直是粉丝的忠实粉丝pylint.它的静态分析已成为我们所有python项目的关键部分,并且节省了大量时间来追逐晦涩的错误.但是从1.3 - > 1.4升级后,几乎所有编译的c扩展都会导致E1101(无成员)错误.

之前通过pylint1.3 运行完全清洁的项目现在抱怨几乎每个使用E1101的C扩展成员.我们被迫禁用E1101错误,但这实际上减损了它的用处pylint.

例如,这完全有效地使用了lxml

r"""valid.py: demonstrate pylint 1.4 error"""
from lxml import etree
print etree.Element('mydoc')
Run Code Online (Sandbox Code Playgroud)

运行此过程pylint,它会报告:

$ pylint -rn valid.py
No config file found, using default configuration
************* Module valid
E:  3, 6: Module 'lxml.etree' has no 'Element' member (no-member)
Run Code Online (Sandbox Code Playgroud)

但它完全有效:

$ python valid.py
<Element mydoc at 7fddf67b1ba8>
Run Code Online (Sandbox Code Playgroud)

这里真的很奇怪.一小部分C扩展似乎可以正常工作pylint,例如:

r"""valid2.py: this one works fine"""
import sqlite3
print sqlite3.version

$ pylint -rn valid2.py
No config file …
Run Code Online (Sandbox Code Playgroud)

python pylint python-extensions

47
推荐指数
3
解决办法
9851
查看次数

在lxml中,如何删除标记但保留所有内容?

问题是这样的:我有一个像这样的XML片段:

<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>
Run Code Online (Sandbox Code Playgroud)

对于结果,我想删除所有<a>- 和 - <c>标签,但保留它们的(文本)内容和子节点就像它们一样.此外,<b>-Element应保持不变.结果应该是这样的

<fragment>text1 inner<d>1</d> text2 <b>inner2</b> text3</fragment>
Run Code Online (Sandbox Code Playgroud)

暂时,我将恢复一个非常肮脏的技巧:我将etree.tostring片段,通过正则表达式删除有问题的标签,并用etree.fromstring结果替换原始片段(不是真正的代码,但应该是这样的):

from lxml import etree
fragment = etree.fromstring("<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>")
fstring = etree.tostring(fragment)
fstring = fstring.replace("<a>","")
fstring = fstring.replace("</a>","")
fstring = fstring.replace("<c>","")
fstring = fstring.replace("</c>","")
fragment = etree.fromstring(fstring)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用xslt实现这一点,我知道lxml可以使用xslt,但是必须有更多的lxml本机方法吗?

供参考:我已经尝试过使用lxml的element.replace,但由于我想在之前有一个元素节点的地方插入文本,我不认为我能做到这一点.

python xml lxml

20
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

lxml ×1

pylint ×1

python-extensions ×1

xml ×1