2017-10-12 94 views
-2
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: ")) 

当我输入一个整数它移动到下一个变量的第一个,但我想它说“输入字符串”这个try/except块在Python中有什么问题?

+0

输入已经返回一个字符串 –

+0

也许它有助于读为'尝试并继续,除非它拧紧做这个,而不是'。由于块中的所有内容都是字符串,因此不会出现问题。 – percusse

回答

0

任何输入已经是一个字符串。当您读取整数(例如123)时,输入将以字符串形式出现(如“123”)。将它投射到str什么都不做。你需要更加具体地了解你期望的输入,并且测试

例如,您可能想要确定所有字符都在特定集合中,例如字母,空格和某些标点符号。那么你需要为这些特征写一个或两个特定的测试。

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 
0

返回类型input始终是str的一个实例。即使用户输入看起来是一个数字,结果仍然是一个包含数字的字符串。例如如果他们输入5,它仍以字符串'5'的形式给出。

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

例如

user_name = input("Enter your full name: ") 
try: 
    int(user_name) 
except ValueError: 
    pass 
else: 
    print("Enter a string") 

上面的代码首先将输入读入一个变量,这将始终是一个字符串。然后尝试使用int()方法将其转换为整数。如果转换失败(这是我们想要的)。我们只是照常进行(使用pass)。否则它会打到else并打印我们的信息。

0

except-尝试的一部分 - 除非try -part中的内容引发错误,否则仅运行。

一个例子是由零整除。当试图在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 -block内的代码不会运行,因为在尝试运行try -block内的内容时没有错误。 try-block内部发生的事情是简单地将一个输入分配给一个变量。此行没有任何错误,因此except - 块不会运行。

有不同的方法来获得你想要的功能。您可能想重复一遍,输入需要是一个字符串,直到用户实际输入一个字符串。你可以用while -loop来做到这一点。如果字符串转换为整数转换失败,则引发的特定错误是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") 

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