4

我正在尝试解析 XML 文档并获取某些标签。我想获取名称标签(仅当它是嵌套在艺术家中的名称标签时)和标题标签(仅当它是嵌套在发布中的标签时)。
不过,这并不是很重要,重要的是我由于某种原因收到一个错误,说 elif 语句是无效的语法
我查看了其他帖子并确保我的标签是正确的并且没有任何任何 if 之后的额外换行符。

这是代码片段:

from lxml import etree
import sys

#infile = raw_input("Please enter an XML file to parse:  ")
outfile = open('results.txt', 'a')

path = []
for event, elem in etree.iterparse('releases7.xml', events=("start", "end")):
    if event == 'start':
        path.append(elem.tag)
    elif event == 'end':
        # process the tag
        if elem.tag == 'name':
            if 'artist' in path and not 'extraartists' in path and not 'track' in path:
                outfile.write( 'artist = ' + elem.text.encode('utf-8') + '\n' )
        elif elem.tag == 'title':
            if 'release' in path and not 'track' in path:
                outfile.write( 'release title = ' + elem.text.encode('utf-8') + '\n')
            else:
                print 'nonrelease'
        path.pop()

这是错误:

File "DataDestroy_Fast.py", line 18
elif elem.tag == 'title':
   ^
SyntaxError: invalid syntax

(注:在 Mac OSX 上使用 Python2.7)

4

2 回答 2

6

正如我在评论中提到的那样,我曾经遇到过这样的错误,这是由于一个额外的制表符恰好位于它没有任何可见的位置。

如果您的编辑器允许您查看诸如制表符和换行符之类的不可见字符,那么您可能能够实际查看是否是这种情况。我的编辑器还可以选择将制表符转换为空格,从而解决此类问题。如果一切都失败了,只需删除行首的所有空格,然后小心地重做,然后查看错误是否仍然存在。

最近我遇到了一个类似问题的非常好的答案How can I add a print statement to this code without getting an indentation error

于 2013-11-19T21:46:24.393 回答
0

中间的if,如下图:

“如果路径中的'艺术家'而不是路径中的'extraartists'而不是路径中的'track':outfile.write('artist ='+ elem.text.encode('utf-8')+'\ n')”

在返回“elif elem.tag == 'title':”之前,应该用 else 关闭

我的建议是在 if 中创建另一个 if 函数而不是 if。它会不那么复杂。

于 2018-10-31T07:09:29.277 回答