如何在列表中调用函数,捕获异常并在必要时重复一个函数?

时间:2019-03-27 06:02:32

标签: python

我正在尝试让用户输入所有具有相同标准的问题(要求用户将评分从1到10)。

我把每个问题都当作一个函数,我用for循环按照它们在列表中的位置顺序来调用它们。在for循环中,我有一个while循环检查它们是否有异常。但是,Python在检查异常之前正在运行所有功能。我希望它运行第一个功能,检查是否有错误,然后运行第二个功能。我该如何实施?

这是我的代码:

interest_list = []
function_list = [cheese(), wine(), beer(), spirits(), \
              coffee(), chocolate()]
for afunc in function_list :
    loop_check = None
    while loop_check == None :
        try :
            if int(afunc) <= 5 and int(afunc) >= -5 :
                interest_list.append(afunc)
            else :
                raise RangeQuestionsError

        except (ValueError, RangeQuestionsError) :
            print(afunc, " is not a valid choice. Try again.", sep="")
            loop_check = None

2 个答案:

答案 0 :(得分:0)

您在初始化不正确的列表时正在调用函数,请尝试以下代码

interest_list = []
function_list = [cheese, wine, beer, spirits, \
              coffee, chocolate]
for afunc in function_list :
    loop_check = None
    while loop_check == None :
        try :
            if int(afunc()) <= 5 and int(afunc()) >= -5 :
                interest_list.append(afunc)
            else :
                raise RangeQuestionsError

        except (ValueError, RangeQuestionsError) :
            print(afunc, " is not a valid choice. Try again.", sep="")
            loop_check = None

答案 1 :(得分:0)

您可以将list作为字符串列表,然后使用eval函数对其进行评估。

请记住,您还必须定义函数。

interest_list = []
function_list = ['cheese()', 'wine()', 'beer()', 'spirits()', 'coffee()', 'chocolate()']

for func in function_list :
    afunc = eval(func)
    loop_check = None
    while loop_check == None :
        try :
            if int(afunc) <= 5 and int(afunc) >= -5 :
                interest_list.append(afunc)
            else :
        raise RangeQuestionsError
    except (ValueError, RangeQuestionsError) :
        print(afunc, " is not a valid choice. Try again.", sep="")
        loop_check = None