我正在努力学习异常处理,并想给自己一些练习。下面是我的代码,它让用户输入一个分数,并将其打印回屏幕。我的问题是,最后的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
答案 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")
这样,如果您发现异常,将再次提示用户输入。这可以确保您的函数始终返回有效分数。