Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么即使输入是整数,我仍然会得到TypeError?_Python_Typeerror - Fatal编程技术网

Python 为什么即使输入是整数,我仍然会得到TypeError?

Python 为什么即使输入是整数,我仍然会得到TypeError?,python,typeerror,Python,Typeerror,我正在为一个学校项目编写一些代码,该项目要求用户输入一个介于0-10之间的数字,我不知道为什么我会一直收到一个TypeError,即使使用列表将输入转换为整数。需要帮忙吗?我在101楼做这个 numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven",

我正在为一个学校项目编写一些代码,该项目要求用户输入一个介于0-10之间的数字,我不知道为什么我会一直收到一个TypeError,即使使用列表将输入转换为整数。需要帮忙吗?我在101楼做这个

numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
    num = ''
    while num == '':
        try:
            num = input("Please enter a number: ")
            num = int(num)
        except ValueError:
            if num in numbers:
                num = numbers.index(num)
                num = int(num)
            else:
                print('Invalid input, please enter valid input')
    if num == 0:
        print("Thank you for using this program")
        break
    elif num < 0 or num > 10:
        print("This is an invalid number, please enter a valid number.")
        print()
        continue
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=“”
而num='':
尝试:
num=输入(“请输入一个数字:”)
num=int(num)
除值错误外:
如果数字为num:
num=数字。索引(num)
num=int(num)
其他:
打印('无效输入,请输入有效输入')
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)
打印()
持续

我认为这就是原因:

当您的输入不是有效输入时,如
“asdf”
。它将跳出内部while循环。因为您的内部while循环条件是
num=''
,而
num
现在是
“asdf”

您只需将
num=”“
放在
print('无效输入,请输入有效输入')
下即可,您的代码将正常工作,不再产生TypeError

完整代码如下:

numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
    num = ''
    while num == '':
        try:
            num = input("Please enter a number: ")
            num = int(num)
        except ValueError:
            if num in numbers:
                num = numbers.index(num)
                num = int(num)
            else:
                print('Invalid input, please enter valid input')
                num = ""
    if num == 0:
        print("Thank you for using this program")
        break
    elif num < 0 or num > 10:
        print("This is an invalid number, please enter a valid number.")
        print()
        continue
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=“”
而num='':
尝试:
num=输入(“请输入一个数字:”)
num=int(num)
除值错误外:
如果数字为num:
num=数字。索引(num)
num=int(num)
其他:
打印('无效输入,请输入有效输入')
num=“”
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)
打印()
持续
事实上,您的代码可以简化为一个循环:

numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
    num = input("Please enter a number: ")
    if num in numbers:
        num = numbers.index(num)
    else:
        try:
            num = int(num)
        except ValueError:
            print("Invalid input, please enter valid input")
            continue
    if num == 0:
        print("Thank you for using this program")
        break
    elif num < 0 or num > 10:
        print("This is an invalid number, please enter a valid number.")
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=输入(“请输入一个数字:”)
如果数字为num:
num=数字。索引(num)
其他:
尝试:
num=int(num)
除值错误外:
打印(“无效输入,请输入有效输入”)
持续
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)

我认为这就是原因:

当您的输入不是有效输入时,如
“asdf”
。它将跳出内部while循环。因为您的内部while循环条件是
num=''
,而
num
现在是
“asdf”

您只需将
num=”“
放在
print('无效输入,请输入有效输入')
下即可,您的代码将正常工作,不再产生TypeError

完整代码如下:

numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
    num = ''
    while num == '':
        try:
            num = input("Please enter a number: ")
            num = int(num)
        except ValueError:
            if num in numbers:
                num = numbers.index(num)
                num = int(num)
            else:
                print('Invalid input, please enter valid input')
                num = ""
    if num == 0:
        print("Thank you for using this program")
        break
    elif num < 0 or num > 10:
        print("This is an invalid number, please enter a valid number.")
        print()
        continue
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=“”
而num='':
尝试:
num=输入(“请输入一个数字:”)
num=int(num)
除值错误外:
如果数字为num:
num=数字。索引(num)
num=int(num)
其他:
打印('无效输入,请输入有效输入')
num=“”
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)
打印()
持续
事实上,您的代码可以简化为一个循环:

numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
    num = input("Please enter a number: ")
    if num in numbers:
        num = numbers.index(num)
    else:
        try:
            num = int(num)
        except ValueError:
            print("Invalid input, please enter valid input")
            continue
    if num == 0:
        print("Thank you for using this program")
        break
    elif num < 0 or num > 10:
        print("This is an invalid number, please enter a valid number.")
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=输入(“请输入一个数字:”)
如果数字为num:
num=数字。索引(num)
其他:
尝试:
num=int(num)
除值错误外:
打印(“无效输入,请输入有效输入”)
持续
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)

在动态语言中,发生在您身上的事情可能会发生很多,因为类型是在运行时解析的,而不是在设计时解析的,所以有时很难理解

首先,将
user\u input
与您正在计算的数字(
num
)分离为两个不同的参数(一个用于用户输入字符串,一个用于整数)-我知道这在Python上并不重要,但这是一个很好的做法

现在,您的
num
值将仅在成功解析时分配。在循环结束时也不需要
继续

代码片段

numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
    user_input = ''
    num = None  # default invalid value
    while num is None:
        try:
            user_input = input("Please enter a number: ")
            num = int(user_input)
        except ValueError:
            if user_input in numbers:
                num = numbers.index(user_input)
            else:
                print('Invalid input, please enter valid input')
                print()
    if num == 0:
        print("Thank you for using this program")
        break
    elif num < 0 or num > 10:
        print("This is an invalid number, please enter a valid number.")
        print()
Please enter a number: 1
Please enter a number: one
Please enter a number: 11
This is an invalid number, please enter a valid number.

Please enter a number: -1
This is an invalid number, please enter a valid number.

Please enter a number: no numbder
Invalid input, please enter valid input

Please enter a number: 0
Thank you for using this program

Process finished with exit code 0

在动态语言中会发生很多事情,因为类型是在运行时而不是在设计时解析的,所以有时很难理解

首先,将
user\u input
与您正在计算的数字(
num
)分离为两个不同的参数(一个用于用户输入字符串,一个用于整数)-我知道这在Python上并不重要,但这是一个很好的做法

现在,您的
num
值将仅在成功解析时分配。在循环结束时也不需要
继续

代码片段

numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
    user_input = ''
    num = None  # default invalid value
    while num is None:
        try:
            user_input = input("Please enter a number: ")
            num = int(user_input)
        except ValueError:
            if user_input in numbers:
                num = numbers.index(user_input)
            else:
                print('Invalid input, please enter valid input')
                print()
    if num == 0:
        print("Thank you for using this program")
        break
    elif num < 0 or num > 10:
        print("This is an invalid number, please enter a valid number.")
        print()
Please enter a number: 1
Please enter a number: one
Please enter a number: 11
This is an invalid number, please enter a valid number.

Please enter a number: -1
This is an invalid number, please enter a valid number.

Please enter a number: no numbder
Invalid input, please enter valid input

Please enter a number: 0
Thank you for using this program

Process finished with exit code 0

您只需执行
bool(TypeError)
,这是
True
,而不考虑
num
或您期望的任何条件。如果类型错误
的目的是什么?如果要检查
类型错误