为什么 main() 和 if __name__=='__main__': main() 造成了麻烦?

why main() and if __name__=='__main__': main() is causing trouble?

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',我会没事的使用以下代码。

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)

有人可以解释为什么它在 former 中不起作用吗?我应该如何让它起作用?

与:

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

你调用了main函数两次(当你的程序是运行作为主程序时),所以当你输入一串数字后,再按一次回车结束输入, main 调用 removal 进行预期的操作,不产生任何输出,returns 到主程序开始另一个调用 main,提示另一个系列的数字输入。如果此时您简单地按下另一个 Enter,您最终会得到 inputs 列表的一个空列表,您的 removal 函数无法正确处理该列表,并且会调用 min列表,导致 ValueError: min() arg is an empty sequence.

的异常