为什么main()以及__name __ =='__ main__':main()引起了麻烦?

时间:2018-09-24 03:20:28

标签: python-2.7 main

def removal(DataList, n):
    if len(DataList) < 2*n:
        print "Not enough elements!"
    for i in range(n):
        DataList.remove(min(DataList))
        DataList.remove(max(DataList))
    return sorted(DataList)

def main():
    inputs = []
    while True:
        inp = raw_input("Please enter a new integer, press ENTER if you want to stop: ")
        if inp == "":
            break
        else:
            inputs.append(inp)
    removal(inputs,2)
if __name__=='__main__':
    main()
main()

我有一个ValueError: min() arg is an empty sequence 同时,如果我没有在main()中编写代码,并且如果 name ==' main ',我可以使用以下代码。 / p>

def removal(DataList, n):
    #return to a sorted list with n smallest and n largest numbers removed. 
    for i in range(n):
        DataList.remove(min(DataList))
        DataList.remove(max(DataList))
    return sorted(DataList)
inputs = []
while True:
    inp = raw_input("Please enter a new integer, press ENTER if you want to stop: ")
    if inp == "":
        break
    else:
        inputs.append(inp)
removal(inputs,2)

有人可以解释为什么它在以前不起作用,我应该如何使它起作用?

1 个答案:

答案 0 :(得分:1)

使用:

if __name__=='__main__':
    main()
main()

您要两次调用main函数(当您的程序作为主程序运行时),因此在输入一系列数字并按另一个Enter键结束输入后,main会调用removal执行预期的操作,该操作不会产生任何输出,并返回主程序以开始对main的另一次调用,该调用将提示另一组数字输入。如果此时仅按另一个Enter键,您将在inputs列表中得到一个空列表,您的removal函数无法正确处理该列表,并以空的形式调用min列表,导致ValueError: min() arg is an empty sequence发生上述异常。