3

我只是在尝试 Python,真的很喜欢它!但我被 try/except 困住了。

我有一个检查 raw_input 是否为整数的代码,但我想让它起作用,但它不想成为它:)

这里的代码,我有这个:

number_of_iterations = raw_input("What is your favorite number?")
try:
    int(number_of_iterations)
    is_number = True
except:
    is_number = False

while not is_number:
    print "Please put a number!"
    number_of_iterations = raw_input("What is your favorite number?")
    try:
        int(number_of_iterations)
        is_number = True
    except:
        is_number = False

我不想在这里重复自己&所以我认为smth即将发挥作用:

def check_input(input_number):
    try:
        int(input_number)
        return True
    except:
        return False

但是如果输入一个字符串就会出错,说int不能用于字符串。看起来它没有看到“尝试”关键字。smone 可以解释为什么会发生这种情况以及将来如何预防吗?

4

2 回答 2

2

试试这个,它可以避免重复自己而不需要def

while True:
    try:
        number_of_iterations = int(raw_input("What is your favorite integer?"))
        break
    except ValueError:
        print "Please put an integer!"

编辑:根据评论者的建议,我已添加breaktry块的部分以消除else(原件仍然作为下面的参考)。另外,我将“数字”更改为“整数”,因为“3.14”在上述代码中无效。

这是我最初的建议。上面的行更少(有些人可能称之为更清洁),但我更喜欢下面的,因为对我来说意图更清晰。

while True:
    try:
        number_of_iterations = int(raw_input("What is your favorite integer?"))
    except ValueError:
        print "Please put an integer!"
    else:
        break
于 2013-04-25T21:53:05.020 回答
1

如果你想要它作为一个函数,决定两件事:

  • 它需要做什么工作,以及
  • 它需要吐出什么。

您的用例是您需要某种 int 返回,如果它因某种原因而爆炸,则将其定义为不是数字。

让我们创建一个元组作为我们的返回值,这样我们就可以返回某种数字和“如果它是一个数字”的布尔值。

def check_input(number):
    try:
        return (int(number), True)
    except ValueError:
        return (-999999, False) # Care more about boolean here

然后我们可以while像这样在循环中使用该返回值。请注意,我明确地将循环条件设置为False,因此我们至少输入一次。

is_number = False
num = -999999 # Define out of scope of loop so it can be used

while not is_number:
    print "Please put a number!"
    num, is_number = check_input(raw_input("What is your favorite number?"))

该行num, is_number元组打包的结果。由于我们从我们的方法返回一个元组,我们可以为该元组的结果设置两个不同的变量。

于 2013-04-25T22:03:10.347 回答