函数返回“无”或说“超出最大递归深度”

时间:2019-12-26 06:25:55

标签: python function

我正在尝试创建一个程序,该程序将使用两组随机整数,并根据这两组整数的结果打印一条语句。但是,当我调用该方法时,我收到“无”或错误消息,指出“超出了最大递归深度”。我似乎无法弄清楚如何在这些方法中构造我的return语句,以使其正常工作。

def genre(a,b):
    genreType = random.randint(a,b)

    if genreType == '1':
        genreType = "Fantasy"
        return genre()
    elif genreType == '2':
        genreType = "Sci-Fi"
        return genre()

def medium():
    mediumType = random.randint(1,2)

    if mediumType == '1':
        genre = genre(1,2)
        print("Play a " + genre + "game")
        return medium()
    elif mediumType == '2':
        genre = genre(1,2)
        print("Watch a " + genre + "anime")
        return medium()

1 个答案:

答案 0 :(得分:1)

首先,如果函数的分支中没有return,它将返回None,例如:

def something():
    if False:
        return "Thing"
    # There is no return in "else"

print(something()) # None

第二,将数字与字符串进行比较永远不会成功:

print(1 == 1) # True
print(1 == '1') # False

因此,您提供的示例只能始终返回None


第三,您没有从函数中返回任何有意义的东西:

def genre(a,b):
    genreType = random.randint(a,b)

    if genreType == '1':
        genreType = "Fantasy"
        return genre() # call this function again, but with no parameters, why?!

如果条件有可能成立,那么您将得到

TypeError: genre() missing 2 required positional arguments: 'a' and 'b'

我只能猜测您是要这样做:

    if genreType == 1:
        genreType = "Fantasy"
        return genreType

或者,更短且更具可读性:

def genre(a,b):
    genreType = random.randint(a,b)

    if genreType == 1:
        return "Fantasy"
    elif genreType == 2:
        return "Sci-Fi"
    # And you can add your own error to know what exactly went wrong
    else:
       raise Exception("Genre bounds must be between 1 and 2")