首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从上次elif获得输出

无法从上次elif获得输出
EN

Stack Overflow用户
提问于 2019-08-30 08:04:36
回答 2查看 63关注 0票数 0

我正在尝试迭代目录中的一堆.xml文件。

为此,我编写了一个python脚本:

代码语言:javascript
复制
#!/usr/bin/python3.5

import os
import glob

pathToDirectory = '/home/anton/Documents/Repo_from_GitHub/ResiShared/templates/'

for filename in os.listdir(pathToDirectory):
    file = open(pathToDirectory.__add__(filename), "r")
    count = 0
    for line in file:
        if line.__contains__('xmlns="http://xml.juniper.net/xnm/1.1/xnm"') \
                | line.__contains__('xmlns="http://tail-f.com/ned/cisco-ios-xr"') \
                | line.__contains__('xmlns="http://tail-f.com/ned/arista-dcs"'):
            ++count
        elif line.__contains__('tags="replace"'):
            --count
        elif (line.__contains__('</config>') \
                | line.__contains__('</config-template>')) & count > 0:
                    print ('There are ' + str(count) + ' tags="replace" missing in the ' + file.name)

它的工作没有任何错误发现,但我也没有从最后一个"elif“输出,但它肯定是。

下面是.xml文件的一个示例:xml文件示例

更新:我这里不需要任何类型的XML解析器,核心Python功能应该足够了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-30 08:36:25

python不支持++--运算符。因此,当您执行++count--count时,count的值没有任何变化,count > 0始终是False

注意,它不会引发异常,因为它是一个有效的代码。实际上,++count是连续应用一元运算符+两次(即+(+count))。-- (-(-count))也是如此。

考虑到xml文件,您希望line.__contains__('</config-template>')) & count > 0True,但它不是。

我同意@King‘’sjester的评论,也同意你为什么直接调用像__contain__()这样的call方法?这至少会降低代码的可读性,使IMHO变得丑陋。我会使用@mannojlds的建议来查找更多的pythonic工具来解析xml文件。

代码语言:javascript
复制
>>> line = 'spam'
>>> count = 0
>>> line.__contains__('eggs') & count > 0
False

编辑,包括对一元运算符的解释。

票数 3
EN

Stack Overflow用户

发布于 2019-08-30 08:45:11

正如buran所指出的,python中没有++操作符,因此count的值保持在0。更改以下内容可以解决您的问题:

++count应该是count += 1

--count应该是count -= 1

|符号是按位运算符,而应该使用or

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57722871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档