Python 函数在输入错误后返回None

Python 函数在输入错误后返回None,python,python-3.x,Python,Python 3.x,我需要一个函数,除了错误的输入,并要求再次输入。但输入错误后,它返回None,而不是新输入。我的代码出了什么问题,如何解决 def start(): def inputNumber(answer): try: number = int(input(answer)) if number <= 100 and number >= 0: print('%%%',number,'%%%'

我需要一个函数,除了错误的输入,并要求再次输入。但输入错误后,它返回
None
,而不是新输入。我的代码出了什么问题,如何解决

def start():

    def inputNumber(answer):
        try:
            number = int(input(answer))
            if number <= 100 and number >= 0:
                print('%%%',number,'%%%')
                return number
            else:
                inputNumber('Number is wrong, please input number from 0 to 100: ')
        except (ValueError):
            inputNumber('It is not a number, please input number from 0 to 100: ')
    
    def checkInput(number2):
        print('$$$',number2,'$$$')
        if number < 50:
            return number2
        else:
            return checkInput(inputNumber('Input number from 0 to 100: '))

    number = 0
    print('###',checkInput(inputNumber('Input number from 0 to 100: ')),'###')
    start()

start()
def start():
def输入编号(回答):
尝试:
数字=整数(输入(回答))
如果数字=0:
打印(“%%”,数字“%%”)
返回号码
其他:
inputNumber('数字错误,请输入0到100之间的数字:')
除了(值错误):
inputNumber('不是数字,请输入0到100之间的数字:')
def检查输入(编号2):
打印(“$$”,数字2,$$$)
如果数字小于50:
返回号码2
其他:
返回checkInput(inputNumber('inputNumber从0到100:'))
数字=0
打印('####',检查输入(inputNumber('输入编号从0到100:')),'###')
开始()
开始()
结果是:

从0到100的输入号码:777

编号错误,请输入0到100之间的编号:sadf

不是数字,请输入0到100之间的数字:17

%%%17%%%

$$$无$$$

TypeError:无序类型:NoneType()
您正在递归调用
inputNumber
,但不返回递归调用的结果。更好地使用循环而不是递归:

def inputNumber(prompt):
    while True:
        try:
            number = int(input(prompt))
            if 0 <= number <= 100:
                print('%%%',number,'%%%')
                return number
            prompt = 'Number is wrong, please input number from 0 to 100: '
        except ValueError:
            prompt = 'It is not a number, please input number from 0 to 100: '
def输入编号(提示):
尽管如此:
尝试:
数字=整数(输入(提示))

如果0您正在递归调用
inputNumber
,但不返回递归调用的结果。更好地使用循环而不是递归:

def inputNumber(prompt):
    while True:
        try:
            number = int(input(prompt))
            if 0 <= number <= 100:
                print('%%%',number,'%%%')
                return number
            prompt = 'Number is wrong, please input number from 0 to 100: '
        except ValueError:
            prompt = 'It is not a number, please input number from 0 to 100: '
def输入编号(提示):
尽管如此:
尝试:
数字=整数(输入(提示))

如果0则问题在于,一旦检查失败,您将再次调用
inputNumber
,但不对答案执行任何操作。你需要归还它

def start():

    def inputNumber(answer):
        try:
            number = int(input(answer))
            if number <= 100 and number >= 0:
                print('%%%', number, '%%%')
                return number
            else:
                return inputNumber('Number is wrong, please input number from 0 to 100: ')
        except (ValueError):
            return inputNumber('It is not a number, please input number from 0 to 100: ')

    def checkInput(number2):
        print('$$$', number2, '$$$')
        if number < 50:
            return number2
        else:
            return checkInput(inputNumber('Input number from 0 to 100: '))

    number = 0
    print('###', checkInput(inputNumber('Input number from 0 to 100: ')), '###')
    start()

start()
def start():
def输入编号(回答):
尝试:
数字=整数(输入(回答))
如果数字=0:
打印(“%%”,数字“%%”)
返回号码
其他:
返回inputNumber('数字错误,请输入0到100之间的数字:')
除了(值错误):
返回inputNumber('不是数字,请输入0到100之间的数字:')
def检查输入(编号2):
打印(“$$”,数字2,$$$)
如果数字小于50:
返回号码2
其他:
返回checkInput(inputNumber('inputNumber从0到100:'))
数字=0
打印('####',检查输入(inputNumber('输入编号从0到100:')),'###')
开始()
开始()

问题是,一旦检查失败,您会再次调用
inputNumber
,但对答案不做任何处理。你需要归还它

def start():

    def inputNumber(answer):
        try:
            number = int(input(answer))
            if number <= 100 and number >= 0:
                print('%%%', number, '%%%')
                return number
            else:
                return inputNumber('Number is wrong, please input number from 0 to 100: ')
        except (ValueError):
            return inputNumber('It is not a number, please input number from 0 to 100: ')

    def checkInput(number2):
        print('$$$', number2, '$$$')
        if number < 50:
            return number2
        else:
            return checkInput(inputNumber('Input number from 0 to 100: '))

    number = 0
    print('###', checkInput(inputNumber('Input number from 0 to 100: ')), '###')
    start()

start()
def start():
def输入编号(回答):
尝试:
数字=整数(输入(回答))
如果数字=0:
打印(“%%”,数字“%%”)
返回号码
其他:
返回inputNumber('数字错误,请输入0到100之间的数字:')
除了(值错误):
返回inputNumber('不是数字,请输入0到100之间的数字:')
def检查输入(编号2):
打印(“$$”,数字2,$$$)
如果数字小于50:
返回号码2
其他:
返回checkInput(inputNumber('inputNumber从0到100:'))
数字=0
打印('####',检查输入(inputNumber('输入编号从0到100:')),'###')
开始()
开始()

运行此代码,它将解决您的问题。您只需要捕获为额外错误(
namererror

def start():
def输入编号(回答):
尝试:
数字=整数(输入(回答))
如果数字=0:
打印(“%%”,数字“%%”)
返回号码
其他:
inputNumber('数字错误,请输入0到100之间的数字:')
除(ValueError,NameError)外,其他为e:
inputNumber('不是数字,请输入0到100之间的数字:')
def检查输入(编号2):
打印(“$$”,数字2,$$$)
如果数字小于50:
返回号码2
其他:
返回checkInput(inputNumber('inputNumber从0到100:'))
数字=0
打印('####',检查输入(inputNumber('输入编号从0到100:')),'###')
开始()
开始()

运行此代码,它将解决您的问题。您只需要捕获为额外错误(
namererror

def start():
def输入编号(回答):
尝试:
数字=整数(输入(回答))
如果数字=0:
打印(“%%”,数字“%%”)
返回号码
其他:
inputNumber('数字错误,请输入0到100之间的数字:')
除(ValueError,NameError)外,其他为e:
inputNumber('不是数字,请输入0到100之间的数字:')
def检查输入(编号2):
打印(“$$”,数字2,$$$)
如果数字小于50:
返回号码2
其他:
返回checkInput(inputNumber('inputNumber从0到100:'))
数字=0
打印('####',检查输入(inputNumber('输入编号从0到100:')),'###')
开始()
开始()

Sorry函数checkInput()是错误的,但不管怎样,它都不返回任何值。在Python中,
return
是显式的。您必须返回函数的结果。在
else
except
中的
inputNumber
之前添加
return
。抱歉,函数checkInput()是错误的,但不管怎样它都不返回任何值。在Python中
return
是显式的。您必须返回函数的结果。在
else
除外的
中的
inputNumber
之前添加
return