“' NoneType'对象不可迭代“:我知道我的函数什么都不返回,但是

时间:2015-04-19 06:54:40

标签: python

我正在努力学习异常处理,并想给自己一些练习。下面是我的代码,它让用户输入一个分数,并将其打印回屏幕。我的问题是,最后的return语句没有返回,所以我收到错误NoneType' object is not iterable。如果用户不输入分数,我该如何处理这个例外?

def printing_fractions():
    frac = str(input("Input a fraction then press enter: "))
    try:
        n, d = frac.split('/')
        int(n)/int(d)
        return n,d
    except ValueError:
        print("You did not enter a fraction")    
    except ZeroDivisionError:
        print("You cannot divide by zero")
    return 

numerator, denominator = printing_fractions()
print "Your fraction is: " + numerator + "/" + denominator

2 个答案:

答案 0 :(得分:1)

您的问题是您从函数返回两种不同的类型。在第一种情况下:return n,d和第二种情况:return None

然后,假设当您运行该函数时,您将获得两个值:numerator, denominator = get_fraction()

这条线是您遇到问题的地方。如果您要返回None,而您当前已将其设置为有效退货,则会中断。

修复代码的一种可能方法:

def printing_fractions():
    ...    
    except ZeroDivisionError:
        print("You cannot divide by zero")
    return 0,0

numerator, denominator = get_fraction()
if denominator != 0: print "Your fraction is: " + numerator + "/" + denominator

编辑:

只是想注意,通常当我捕捉这样的异常时,我只使用一个除了:

def printing_fractions():
    frac = str(input("Input a fraction then press enter: "))
    try:
        n, d = frac.split('/')
        int(n)/int(d)
        return n,d
    except:
        print("Please try entering your fraction properly")    
        printing_fractions()

这将导致异常以递归方式再次调用该函数,直到提供正确的输入。

答案 1 :(得分:0)

由于您已经打印了错误消息,我假设您希望在出现错误时再次提示用户输入。

def printing_fractions():
    while True:
        frac = str(input("Input a fraction then press enter: "))
        try:
            n, d = frac.split('/')
            int(n)/int(d)
            return n,d
        except ValueError:
            print("You did not enter a fraction")    
        except ZeroDivisionError:
            print("You cannot divide by zero")

这样,如果您发现异常,将再次提示用户输入。这可以确保您的函数始终返回有效分数。