异常后继续

时间:2014-01-25 01:40:51

标签: python

class Bool():

    def __init__(self, mode):
        self._mode = mode

    def switch(self):  
        if self._mode is False:
            raise Exception
        self._mode = False

class Test():

    def __init__(self):
        self._lst = [False, True, False, True]

    def __str__(self):
        return "list: " + str(self._lst)

    def normal(self):
        for index, element in enumerate(self._lst):
            try:
                Bool(element).switch()
            except Exception:
                continue

我的代码的问题是法线方法似乎不起作用。它应该做的是通过从另一个类调用switch方法获取lst并将所有True的转换为False。如果元素为False,而不是引发任何异常,它应该跳过它并转到下一个元素。

t1 = Test()
print(t1)
list: [False, True, False, True]
t1.normal()
print(t1)
list: [False, True, False, True]

然而它应该是:

t1 = Test()
print(t1)
list: [False, True, False, True]
t1.normal()
print(t1)
list: [False, False, False, False]

1 个答案:

答案 0 :(得分:2)

您必须更改_lst中的值。此外,由于switch()方法不返回任何内容,因此您应该存储Bool的实例,调用其switch()方法,然后将其分配给_lst <中的相应元素/ p>

def normal(self):
    for index, element in enumerate(self._lst):
        try:
            b = Bool(element)  # Store instance
            b.switch()
            self._lst[index] = b._mode  # Change the respective element
        except Exception as e:
            print e  # Just for debug