Python中这个try / except块有什么问题?

时间:2017-10-12 23:10:13

标签: python try-except

    try:
        user_name = str(input("Enter your full name: "))
    except:
        print("Enter a string")

    user_age = int(input("Enter your age: "))
    user_country = str(input("Enter the country you live in: "))
    user_postcode = str(input("Enter your postcode: "))

当我为第一个输入一个整数时,它会移动到下一个变量,但我希望它说"输入一个字符串"

4 个答案:

答案 0 :(得分:0)

任何输入都是一个字符串。当您读取整数(例如123)时,输入将以字符串形式出现(例如" 123")。将其转换为 str 不会做任何事情。您需要更加具体地了解您期望的输入,并测试

例如,您可能希望确定所有字符都在特定集中 - 例如字母,空格和某些标点符号。然后,您需要为这些特征编写一两个特定的测试。

答案 1 :(得分:0)

我想您要测试名称中是否有数字: 你可以这样做:

while True:
    user_name = str(input("Enter your full name: "))
    if [i for i in list(user_name) if i.isdigit()]:
        print("invalid input")
    else:
        break

或者更好地检查所有输入都是字母表中的字母:

alphabet = list("abcdefghijklmnopqrstuvwxyz")

while True:
    errors = 0

    user_name = str(input("Enter your full name: "))
    for i in user_name.split(" "):
        for ii in i:
            if ii not in alphabet:
                errors += 1

    if errors:
        print("You have {} errors".format(errors))
    else:
        break

答案 2 :(得分:0)

userModel.name的返回类型始终是typeof UserName的实例。即使用户输入看似数字的内容,结果仍然是包含该数字的字符串。例如如果他们输入input,它仍然以字符串str的形式提供给您。

所以你需要做的是检查它是否是一个整数。

e.g。

5

上面的代码首先将输入读入变量,这将始终是一个字符串。然后它尝试使用'5'方法将其转换为整数。如果转换失败(这是我们想要的)。我们正常进行(使用user_name = input("Enter your full name: ") try: int(user_name) except ValueError: pass else: print("Enter a string") )。否则它会点击int()并打印我们的消息。

答案 3 :(得分:0)

except - try-except的一部分仅在try - 部分内部发生错误时才会运行。

一个例子是零可分性。尝试在python shell中运行时,以下代码将引发错误;

print(5/0)

您可以捕获此错误,并打印您自己的消息,而不是打印自己的python shell。在这种情况下,ZeroDivisionError是python将抛出的特定类型的错误。使用以下代码,python将捕获该错误,而不是任何其他错误。

try:
     print(5/0)
except ZeroDivisionError:
     print("Cannot divide by zero")

如果您想捕获所有错误,只需撰写except而不是except zeroDivisionError

except - 块中的代码不会运行,因为在尝试运行try - 块内的内容时没有错误。 try-block中发生的事情只是为变量分配输入。此行没有错误,因此except - 块不会运行。

有多种方法可以获得您想要的功能。您可能希望重复输入需要是一个字符串,直到用户实际输入一个字符串。你可以用while循环来做到这一点。如果字符串到整数转换失败,则抛出的特定错误是ValueError

isString = False
while not isString:
      userInput = input("Enter here: ")

      try:
           int(userInput)
      except ValueError:
           # if string to integer fails, the input is a string
           isString = True
      else:
            print("Please enter a string")

只要isStringFalse,就会运行上面的while循环。首先,我们尝试从字符串转换为整数。如果这会引发错误,则输入是一个字符串,因此我们将isString设置为True,而while循环将不再运行。如果转换是成功的,则意味着输入实际上是一个整数,因此else语句将运行,打印用户需要输入字符串。

相关问题