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: "))
当我为第一个输入一个整数时,它会移动到下一个变量,但我希望它说"输入一个字符串"
答案 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")
只要isString
为False
,就会运行上面的while循环。首先,我们尝试从字符串转换为整数。如果这会引发错误,则输入是一个字符串,因此我们将isString设置为True
,而while循环将不再运行。如果转换是成功的,则意味着输入实际上是一个整数,因此else语句将运行,打印用户需要输入字符串。