返回后,Python函数似乎没有终止

时间:2016-06-12 10:50:15

标签: python loops debugging iterator

至少那是我能理解的最多,而且我已经追踪了几个小时的执行流程。以下是代码的相关摘要:

def check_list(inputList):
    '''checks if list is composed of numbers, and, if so, returns a new list of purely integers'''
    VerifiedDataSet = []
    for i in inputList:
        try:
            VerifiedDataSet.append(int(i))
        except:
            print("Value in", inputList.index(i) + 1, "position isn't a number!")
            return "not approved"
    return ("approved", VerifiedDataSet)

print("This program will make your data set into a color coded bar graph (eventually)!")

listStatus = "not approved"

while listStatus == "not approved":
    dataSet = ["1", "2", "foo"] #for illustration of behavior
    result = check_list(dataSet)
    listStatus = result[0]
    if listStatus == 'approved':
        dataSet = result[1]
    else:
        pass

print("You should not see this.")

这个想法是让函数check_list遍历输入列表并尝试将每个元素转换为整数。如果存在异常,它将打印无法转换为整数的值的位置并返回列表未被批准,这应该1)终止函数,以及2)导致while循环下面继续。

只有在没有异常的情况下,迭代器才能完成并且函数返回字符串“approved”(终止while循环)和新的整数列表。但是,根据我的收集情况,listStatus无论如何都会以某种方式设置为“已批准”,因为最后print在执行时永远不会被执行。

可能导致此行为的任何想法?

2 个答案:

答案 0 :(得分:2)

如果出现异常,您将从函数

返回'not approved'

使得listStatus == 'n',因此while循环中断。

答案 1 :(得分:0)

从函数返回的值是一个字符串。因此,结果将具有“未批准”的价值。

listStatus = result[0]

这会使listStatus ='n'而非“未获批准”。