Python错误处理的帮助

1 投票
4 回答
3212 浏览
提问于 2025-04-16 10:17

对于下面这个简单的代码片段

a = raw_input("Enter a number: ")

我该怎么写一个异常处理,让用户如果输入的是字符串,就一直提示他们重新输入,直到输入一个整数为止。

换句话说,就是不断重复这个过程,直到用户输入一个整数为止:

if a.isdigit == False:
    raw_input("Try again: ") 

4 个回答

1

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,如果你想让程序在用户输入的数字大于10时,显示一个特别的消息。这种情况下,我们就会用到“条件语句”。

条件语句就像是在给程序设定一个规则,只有当这个规则满足时,程序才会执行某个动作。比如说,如果你写了一个条件:“如果数字大于10,就显示‘数字很大!’”,那么只有当用户输入的数字真的大于10时,程序才会显示这个消息。

这样,我们就能控制程序的行为,让它根据不同的情况做出不同的反应。这种灵活性是编程中非常重要的一部分。

while True:
    a = raw_input("Enter a number:")
    try:
        i = int(a)
        break
    except ValueError:
        print "Not a number"
1

你可以使用一个 while 循环:

a = ""
while not a.isdigit():
    a = raw_input("Enter a number: ")

如果你想要一个错误提示,那就可以写成这样:

a = raw_input("Enter a number: ")
while not a.isdigit():
    a = raw_input("Try again: ")
2

通常实现这个功能的方法是使用 int() 函数,并加上异常处理来应对可能出现的问题:

>>> n = None
>>> while n is None:
...    a = raw_input("Enter a number: ")
...    try:
...      n = int(a)
...    except ValueError:
...      print "Not a number."
...
Enter a number: abc
Not a number.
Enter a number: cauliflowers are my favourite vegetable
Not a number.
Enter a number: 12
>>>

不过,如果你想避免使用异常处理,可以尝试以下方法。需要注意的是,这种方法只接受自然数,也就是 0, 1, 2, ..., N,不包括负整数:

>>> while True:
...   a = raw_input("Enter a number: ")
...   if a.isdigit():
...     break
...   print "Not a number."
...
Enter a number: I like beetroot too
Not a number.
Enter a number: -500
Not a number.
Enter a number: 500
>>>

如果要处理负整数,事情就会变得复杂一些,需要考虑三种情况:一种是空字符串,一种是负整数,还有一种是自然数:

>>> while True:
...   a = raw_input("Enter a number: ")
...   if len(a) > 0 and ((a[0] == '-' and a[1:].isdigit()) or a.isdigit()):
...     break
...   print "Not a number."
...
Enter a number: Celery stinks.
Not a number.
Enter a number:
Not a number.
Enter a number: -
Not a number.
Enter a number: 1
>>>

撰写回答