当用户在python 2.7中输入字符串时,如何防止出现此错误?

时间:2017-02-19 08:44:44

标签: python python-2.7

loop =1
while loop==1:
    x = input('Enter 1 for CI, 2 for SI, 3 for Area of cylinder and 4 for area of circle:')

    if x==1:
        from math import*
        p = input('Enter Principal: ')
        r = input('Enter rate: ')
        n = input('Enter number of years: ')
        CI = p*pow((1+r),n)
        print 'The Compound Interest is:', CI
        print '\n'
    elif x==2:
        from math import*
        p = input('Enter Principal: ')
        r = input('Enter rate: ')
        n = input('Enter number of years: ')
        SI = (p*n*r)/100.0
        print 'The Simple Interest is:', SI
        print '\n'
    elif x==3:
        from math import*
        r = input('Enter radius of cylinder: ')
        h = input('Enter height of cylinder: ')
        A= 2*pi*r*(h+r)
        print 'The Area of Cylinder is:', A
        print '\n'

    elif x==4:
        from math import*
        r = input('Enter radius of circle:')
        A = pi*r*r
        print 'The Area of circle is:', A
        print '\n'

    else:
        print 'Enter 1,2,3 or 4:'

当用户输入字符串

时,这是错误
Traceback (most recent call last):
   line 3, in <module>
    x = input('Enter 1 for CI, 2 for SI, 3 for Area of cylinder and 4 for area of circle:')
  File "<string>", line 1, in <module>
NameError: name 'j' is not defined

1 个答案:

答案 0 :(得分:2)

在Python 3之前,input尝试将evaluate the input作为Python表达式。如果您输入j,则会尝试找到失败的名称j

使用raw_input代替,但不会进行评估,但会返回一个字符串:在这种情况下,您需要更改if条件以测试字符串:

if x == '1':

...等

然后对于其他input()调用你也可以这样做,然后将你得到的字符串转换为float:

p = float(raw_input('Enter Principal: '))

当然,如果用户输入非数字数据,那可能会失败,这实际上是一个错误条件。您可以将其放在try块中并处理该错误情况。

查看在repl.it

上运行的更正后的脚本