尝试,除了 - 不输入if语句

时间:2014-04-10 18:46:10

标签: python validation python-3.x

我有我要验证的代码,但它不会输入if语句:

while True:
    try:
        ISBN = int(input("Please enter a 10 digit number: "))
        print("TT")
        if len(ISBN)!= 10:
            print("T")
            print("That was an incorrect input.")
        else:
            # do code
    except:   
        print("RRRRR")
        print("That was an incorrect input.")

这是输入/输出:

Please enter a 10 digit number: 1234567898
TT
RRRRR
That was an incorrect input.
Please enter a 10 digit number: 

2 个答案:

答案 0 :(得分:3)

int个对象没有长度:

>>> len(1234567890)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

因为您正在使用Pokemon异常处理程序(全部捕获它们),所以您也无法获得正确的错误消息。移除您的try: / except:或至少将其缩小到您要忽略的一两种异常类型;对于int()次转化,只能抓取 ValueError。仅针对int()电话,而不是其他所有电话:

while True:
    try:
        ISBN = int(input("Please enter a 10 digit number: "))
    except ValueError:
        print("That was an incorrect input.")
    else:
        # continue with ISBN being a valid integer

如果您想知道位数,请选择字符串版本的长度:

if len(str(isbn)) != 10:

或测试边界:

if not (10**10 > isbn >= 10**9):

用于验证10位数字:

>>> isbn = 1234567898
>>> len(str(isbn))
10
>>> (10**10 > isbn >= 10**9)
True

答案 1 :(得分:1)

您正在将ISBN输入转换为int,然后检查其长度。

将其更改为

ISBN = input("Please enter a 10 digit number: ")

并稍后在else块中将其转换为整数值。

请注意,int个对象没有长度,因此您的代码会直接转到except块。


根据我的建议更改,您的代码将变为

while True:
    try:
        ISBN = input("Please enter a 10 digit number: ")
        print(ISBN)
        if len(ISBN)!= 10:
            print("T")
            print("That was an incorrect input.")
        else:
            ISBN = int(ISBN)
            print(ISBN)
            # do code
    except:   
        print("RRRRR")
        print("That was an incorrect input.")

但请注意,您正在捕获常规错误,最好抓住特定的ValueError