无法弄清楚为什么int(“”)表现得很奇怪

时间:2018-05-19 00:44:28

标签: python int valueerror

所以我正在创建一个代码,该代码从用户那里获取一个名称和数字,然后用一个来计算。我正在使用'while'和'try'来阻止任何非字母通过,但它似乎不适用于空白。我已经使用idle来测试是否“int(”“)”并且它出现了一个值错误,但由于某种原因,当它在一个函数中它正在起作用时。有任何想法吗?我把剩下的代码遗漏了。

这是我的代码。

testNumber=""

def numQualify(x):
     while x:
         try:
             x=int(x)
         except ValueError:
             print("That was not a proper number.")
             return False
         else:
             print("Great number!")
             break

testNumber=input("Write a number")

while numQualify(testNumber) == False:
    testNumber=input("Please try another number")

print("Done")

1 个答案:

答案 0 :(得分:4)

在Python中,为了像False循环或while语句这样的条件,有些东西隐含地计为if。空字符串就是其中之一。因此,当您将空字符串传递给numQualify时,while x循环会立即终止,并且由于没有return语句,它将返回NoneNone != False

你实际上并不需要一个while循环! numQualify期间x永远不会更改。实际上你可以简单地简化numQualify

def numQualify(x):
    try:
        int(x)
    except ValueError:
        print("That was not a proper number.")
        return False
    print("Great number!")
    return True

现在空字符串进入try块,因此没有问题。由于您拥有while numQualify(testNumber) == False:循环,因此您无需在numQualify

中进行循环