2015-10-22 102 views
8

我试图编写一个代码来编辑一个列表并使其成为一个回文。简单的Python输入错误

一切正常,除了我的输入仍然给我一个错误。当我输入一个非int到get_number_2时,它崩溃。

def get_number(): 
    num = raw_input("Please enter number between 100,000 and 1,000,0000: ") 
    if not num.isdigit(): 
     print "---------------------------" 
     print "Invalid input: numbers only" 
     print "---------------------------" 
     my_main() 
    else: 
     return num 

def get_number_2(n): 
    num = input("Please confirm the number you have entered: ") 
    if num != int(n): 
     print "--------------------" 
     print "Entries do not match" 
     print "--------------------" 
     my_main() 
    else: 
     return num 

我使用的输入从get_number_2的代码的其余部分作为get_number不工作时,我检查了两个数字之间。

有什么办法可以验证,如果输入是一个int在get_number_2,以便我可以摆脱get_number

回答

3

您还应该使用raw_inputint(num)

def get_number_2(n): 
    num = raw_input("Please confirm the number you have entered: ") 
    if not num.isdigit() or int(num) != n: 
     print "--------------------" 
     print "Entries do not match" 
     print "--------------------" 
     my_main() 
    else: 
     return int(num) 

注意

  • 我假设参数n是一个int,或检查这个你可以,如果更改: if not num.isdigit() or not n.isdigit() or int(num) != int(n)
  • 通过使用isdigit我们检查它是否是一个整数,然后将其转换为int
+0

这仍然不起作用,因为如果num不是整数,则int(num)将抛出错误。 –

+0

不再,因为我之前做过检查。 – agold

+0

我只需要将num作为int返回。谢啦。 –

3

您不能这样做num != int(n),因为它会尝试呼叫int(n),如果n实际上不是整数,则该无效无效。

正确的方式做,这是使用tryexcept

try: 
    n = int(n) 
except ValueError: 
    print 'Entry is not an integer.' 
    #handle this in some way 

编辑:另外在Python 2.x中,请使用raw_input()代替input()input()给出了非常奇怪的结果,如果你不知道它在做什么。

+1

请不要使用裸except语句。它应该是'ValueError'除外。 –

+0

雅但如果我可以验证,如果get_number_2是一个int我可以丢弃get_number并消除需要匹配它们? –

+0

@S_Sull是的,你可以简单地执行'try:n = int(raw_input('Enter number:')),除了:ValueError:print'请输入一个整数'来抓取输入并把它变成一个整数,它不是一个。 –

6

编写处理异常的程序。如果用户输入无效整数,它抛出ValueError异常:

try: 
    a = int(b) 
except ValueError: 
    print "Unable to interpret your input as a number" 

你必须更新你的问题是这样的:

def get_number_2(n): 
    num = input("Please confirm the number you have entered: ") 
    try: 
     if num != int(n): 
      print "--------------------" 
      print "Entries do not match" 
      print "--------------------" 
      my_main() 
     else: 
      return num 
    except ValueError: 
     print "Unable to interpret your input as a number" 
-1
from operator import attrgetter 
num0 = input() 
if not attrgetter('isdigit')(num0)(): 
    print("that's not a number") 
+0

固定了压痕!!! –

+2

请添加一些解释。只有代码片段不是真正的答案。 – cezar

+0

其明显 attrgetter('isdigit')(num0)() 如果在“num0”变量给定的字符串是一个数字,则返回Trus,如果不是,则返回False 如果给定的字符串是数字,则程序将运行通常如果不是,它会打印不是数字,如果你喜欢,你可以停止执行或请求输入agin –