请阅读我的代码,以便更好地理解我的问题。我在python中创建一个待办事项列表。在while循环中有尝试和除外,我想将用户输入类型设置为字符串。如果用户键入一个整数,我想打印出“except”块中的消息。但是如果我在运行代码时输入一个整数,它就不会执行ValueError。
以下是代码:
to_do_list = []
print("""
Hello! Welcome to your notes app.
Type 'SHOW' to show your list so far
Type 'DONE' when you'v finished your to do list
""")
#let user show their list
def show_list():
print("Here is your list so far: {}. Continue adding below!".format(", ".join(to_do_list)))
#append new items to the list
def add_to_list(user_input):
to_do_list.append(user_input)
print("Added {} to the list. {} items so far".format(user_input.upper(), len(to_do_list)))
#display the list
def display_list():
print("Here's your list: {}".format(to_do_list))
print("Enter items to your list below")
while True:
#HERE'S WHERE THE PROBLEM IS!
#check if input is valid
try:
user_input = str(input(">"))
except ValueError:
print("Strings only!")
else:
#if user wants to show list
if user_input == "SHOW":
show_list()
continue
#if user wants to end the list
elif user_input == "DONE":
new_input = input("Are you sure you want to quit? y/n ")
if new_input == "y":
break
else:
continue
#append items to the list
add_to_list(user_input)
display_list()
答案 0 :(得分:3)
input
返回一个字符串。有关input
功能,请参阅the docs。将此函数的结果转换为字符串不会做任何事情。
您可以使用isdecimal
检查字符串是否为数字。
if user_input.isdecimal():
print("Strings only!")
这很适合您现有的else
条款。
答案 1 :(得分:2)
您的假设有两个问题:
str
不会引发ValueError
,因为每个整数都可以表示为字符串。input
返回的所有内容(无论如何,在Python 3中,它看起来像你正在使用)已经一个字符串。将字符串转换为字符串肯定不会抛出错误。如果要丢弃全数字输入,可能需要使用isdigit
。
对“全数字”这个词的评论似乎有些混淆。我的意思是一个完全由数字组成的字符串,这是我对OP不需要的解释"整数"在他的待办事项清单上。如果你想抛弃一些更广泛的字符串化数字(有符号整数,浮点数,科学记数法),isdigit
不是你的方法。 :)
答案 2 :(得分:0)
在Python中,input
始终返回一个字符串。例如:
>>> input('>')
>4
'4'
因此str
在这种情况下不会抛出ValueError - 它已经是一个字符串。
如果你真的想检查并确保用户没有输入数字,你可能想检查你的输入是否都是数字,然后输出错误。