从第二次调用函数时获取TypeError

时间:2018-08-06 00:16:34

标签: python

我的问题是错误消息仅在我第二次调用该函数之后才会发生 numLen,phoneMask = numberLen(3) TypeError:“ NoneType”对象不可迭代

这是我的代码。 如果输入正确的扩展名,例如第一次运行脚本时输入71023,则没有问题。 如果我第一次键入错误的扩展名,而第二次键入正确的扩展名,它将返回typeerror消息,并且我可以看到numberlen(i)没有返回任何错误。

谢谢。

import sys


def numAssign(t):

  maskList = ['02694406XX',  '02693710XX']
  extList = ['706XX',  '710XX']
  i = 0
  while i < len(extList) :
    if t != extList[i] :
        i = i + 1
    else :
        return True, maskList[i]

  print('''The extension you entered is not in the indial range.''')        
  return False, ' '




def numberLen(i):

    t = input('Please enter the extnsion : ')
    T = len(t)
    isNum = t.isdecimal()
    patternConvert = t[0:3] + 'XX'

    if T == 5 and isNum == True :
        valid, mask = numAssign(patternConvert)
        print(mask)
        print(i)
        if valid == True:
            print(numAssign(patternConvert))
            return True, mask
        else :
            if i == 0 :
                print('''The number you entered was not valid.
                         It has to be 5 digits.''')
            else :
                print('Please try again')
                print(i)
                numberLen(i-1)

    else :
        if i == 0 :
            print('Your entering is invalid, we will terminiate the programe')
            exit()
        else :
            numberLen(i-1)


if __name__ == '__main__':

    numLen, phoneMask = numberLen(3)
    print(phoneMask)enter code here

1 个答案:

答案 0 :(得分:0)

您的numberLen()函数仅在用户首次进行有效输入时返回调用者期望的元组;否则,它将以递归方式调用自身,并且不返回其返回值,这使该函数默认返回None,从而在调用方尝试将其按顺序解压缩时引起异常。

您应该更改以下两种情况:

numberLen(i-1)

收件人:

return numberLen(i-1)