0

我正在尝试异常处理/错误捕获,想知道为什么下面的代码不起作用。我正在使用python 2.7。我了解 和 之间的区别input()raw_input()了解在 Python 3.0raw_input()中已重命名为。input()如果我输入一个整数,那么代码会一直循环,直到我输入一个字符串。输入字符串时,我收到以下错误消息。有没有办法解决这个问题,或者这只是那些 python 怪癖之一?

  File "<some_directory_path_goes_here>", line 30, in <module>
    enterAge = input('Enter your age as an integer: ')
  File "<string>", line 1, in <module>
NameError: name '<user_entered_string_goes_here>' is not defined

在 python 2.7 中,在我看来代码应该仍然可以工作。

from types import IntType
age = 0
while True:
    enterAge = input('Enter your age as an integer: ')
    try:
        if type(enterAge) is IntType:
            num = enterAge
            age = age + num
            print str(age) + ' is old!'

    except TypeError:
        print 'You did\'t enter an integer'
        break
4

1 回答 1

1

try背后的想法except是您没有事先检查所有必要条件。在你的情况下,你不需要检查里面的类型try。由于该if声明,异常不会在应该引发的时候引发。

此外,您绝对应该raw_input()在 Python 2 上使用并记住它总是返回一个str. 可能不同的是int(enterAge)

In [1]: int('4')
Out[1]: 4

In [2]: int('4f')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/home/lev/<ipython-input-2-523c771e7a8e> in <module>()
----> 1 int('4f')

ValueError: invalid literal for int() with base 10: '4f'

这是您需要在try块中尝试并捕获ValueError.

编辑:显然我需要澄清一下答案,所以我将展示我认为代码的外观:

age = 0
while True:
    enterAge = raw_input('Enter your age as an integer: ')
    try:
        age += int(enterAge)
        print age, 'is old!'

    except ValueError:
        print "You didn't enter an integer"
        break
于 2012-07-20T06:10:13.040 回答