0

私は例外処理/エラートラップを実験していて、なぜ以下のコードが機能しないのか疑問に思っていました。私はPython2.7を使用しています。との違いを理解input()し、Python3.0で名前が変更されたraw_input()ことを理解しています。整数を入力すると、文字列を入力するまでコードがループし続けます。文字列を入力すると、以下のエラーメッセージが表示されます。これを回避する方法はありますか、それともこれはそれらのPythonの癖の1つにすぎませんか?raw_input()input()

  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 に答える