Python除外ValueError:While为True

Python除外ValueError:While为True,python,while-loop,valueerror,except,Python,While Loop,Valueerror,Except,我尝试使用“while true”要求用户输入0或正整数。我试过几种不同的方法,它们似乎都有不同的问题。函数def positive_int拒绝字母和负整数,但不允许阶乘函数工作。阶乘函数自身工作。我得到一个错误代码:TypeError:范围(1,num+1)中的I的+的不支持的操作数类型:'NoneType'和此行的'int'。谢谢你的帮助 def positive_int(prompt=''): while True: try: num

我尝试使用“while true”要求用户输入0或正整数。我试过几种不同的方法,它们似乎都有不同的问题。函数def positive_int拒绝字母和负整数,但不允许阶乘函数工作。阶乘函数自身工作。我得到一个错误代码:TypeError:范围(1,num+1)中的I的+的不支持的操作数类型:'NoneType'和此行的'int'。谢谢你的帮助

def positive_int(prompt=''):
     while True:
         try:
             num = int(input(prompt))
             if num < 0:
                 raise ValueError
             break
         except ValueError:
             print("Please enter a positive integer.")     

print('\n')    
print("The program will compute and output the factorial number.")
def factorial():
        num = positive_int('Please enter the number to factorial: ')
        factorial = 1
        if num == 0:
           print("\nThe factorial of 0 is 1")
        else:
           for i in range(1,num + 1):
               factorial = factorial*i
           print("\nThe factorial of", num,"is",factorial)  
factorial()
def正整数(提示符=“”):
尽管如此:
尝试:
num=int(输入(提示))
如果num<0:
升值误差
打破
除值错误外:
打印(“请输入一个正整数。”)
打印(“\n”)
print(“程序将计算并输出阶乘数。”)
def factorial():
num=正整数('请输入阶乘:'的数字)
阶乘=1
如果num==0:
打印(“\n 0的阶乘是1”)
其他:
对于范围内的i(1,num+1):
阶乘=阶乘*i
打印(“\n的阶乘”,num,“is”,阶乘)
阶乘()

您正在使用阶乘作为函数名和变量名。

问题是正整数没有返回任何内容

尝试:

def正整数(提示符=“”):
尽管如此:
尝试:
num=int(输入(提示))
如果num<0:
升值误差
return num#更改为返回值而不是中断
除值错误外:
打印(“请输入一个正整数。”)
打印(“\n”)
print(“程序将计算并输出阶乘数。”)
def factorial():
num=正整数('请输入阶乘:'的数字)
阶乘=1
如果num==0:
打印(“\n 0的阶乘是1”)
其他:
对于范围内的i(1,num+1):
阶乘=阶乘*i
打印(“\n的阶乘”,num,“is”,阶乘)
阶乘()
函数
positive\u int()
不返回任何内容,这意味着
num=positive\u int()
num
设置为
None
。稍后,当代码尝试将此
None
值添加到int时,代码失败

您可以通过将
break
语句替换为return来修复此问题,或者在中断循环后返回
num

def positive_int(prompt=''):
     while True:
         try:
             num = int(input(prompt))
             if num < 0:
                 raise ValueError
             return num  # Replacing break with return statement 
         except ValueError:
             print("Please enter a positive integer.") 
def正整数(提示符=“”):
尽管如此:
尝试:
num=int(输入(提示))
如果num<0:
升值误差
return num#用return语句替换break
除值错误外:
打印(“请输入一个正整数。”)

def正整数(提示符=“”):
尽管如此:
尝试:
num=int(输入(提示))
如果num<0:
升值误差
打破
除值错误外:
打印(“请输入一个正整数。”)
return num#打破循环将您带到这里

让阶乘函数只有一个用途:计算阶乘,包括在参数非法时引发异常。从提示符读取int应该通过从main调用pisitive_int单独完成
def positive_int(prompt=''):
     while True:
         try:
             num = int(input(prompt))
             if num < 0:
                 raise ValueError
             return num  # Replacing break with return statement 
         except ValueError:
             print("Please enter a positive integer.") 
def positive_int(prompt=''):
     while True:
         try:
             num = int(input(prompt))
             if num < 0:
                 raise ValueError
             break
         except ValueError:
             print("Please enter a positive integer.") 

     return num  # Breaking out of the loop takes you here