在列表中查找字符串并在python中输入if语句

时间:2017-06-10 07:44:18

标签: python python-2.7

下面是列表输出

[[u'\x07\r\n', u'Error: command failed: Invalid IPspace name. The name n 
"yyy" is already in\r\n', u'       use by a cluster node, Vserver, or is 
the name of the local cluster.\r\n', u'\r\n'], [u'\x07\r\n', u'Error: command 
failed: The Vserver name is already used by another Vserver. \r\n', u'\r\n'], 
[u'\x07\r\n', u'Error: command failed: duplicate entry\r\n', u'\r\n']]

以下是代码:

    sub = "duplicate entry"
    if [s for s in self.error_check if sub in s]:
        self.pass_count += 1
    sub = "already exists"
    if [s for s in self.error_check if sub in s]:
        self.pass_count += 1
    sub = "Error:"
    if [s for s in self.error_check if sub in s]:
        self.pass_count += 1

在上面的代码中没有工作(没有输入if语句没有向self.pass_count +添加1)

我正在尝试的是,如果列表包含任何关键字"错误:","已存在"和"重复输入"。

它应该输入if循环并将1添加到self.pass_count

请帮我解决这个问题

按照BoarGules

的建议尝试下面的代码
    if [s for s in self.error_check if "duplicate entry" in s]:
        self.pass_count += 1
        print "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    if [s for s in self.error_check if "already exists" in s]:
        print "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        self.pass_count += 1
    if [s for s in self.error_check if "Error:" in s]:
        self.pass_count += 1
        print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

仍然无法正常工作

2 个答案:

答案 0 :(得分:1)

self.error_check是一个列表清单。

此测试if [s for s in self.error_check if sub in s]:正在检查sub是否为列表的元素。您的代码需要检查的是sub是否是列表元素的子字符串

将列表理解展开到一个循环中,并将临时print语句放入其中以查看正在进行的操作。

答案 1 :(得分:1)

def is_valid(self, sub):
    return any(s for ln in self.error_check for s in ln if sub in s)

if self.is_valid("duplicate entry"):
    self.pass_count += 1
if self.is_valid("already exists"):
    self.pass_count += 1
if self.is_valid("Error:"):
    self.pass_count += 1

注意:is_valid是一种类方法