“尝试”不要在“def”之后传递

时间:2013-04-25 21:37:28

标签: python python-2.7 try-except

我只是在尝试使用Python,非常喜欢它!但是我一直坚持尝试/除了。

我有一个代码检查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

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

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

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

2 个答案:

答案 0 :(得分:2)

试试这个,它可以避免在不需要def

的情况下重复自己
while True:
    try:
        number_of_iterations = int(raw_input("What is your favorite integer?"))
        break
    except ValueError:
        print "Please put an integer!"

编辑:根据评论者的建议,我已将break添加到块的try部分,以消除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

答案 1 :(得分:1)

如果你想把它当作一个功能,那就决定两件事:

  • 需要做什么,
  • 需要吐出来的东西。

你的用例是你需要某种类型的int,如果它因任何原因而被炸出,它被定义为不是数字。

让我们创建一个元组作为返回值,因此我们可以返回一些类型和一个布尔值“if if is a number”。

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_numbertuple packing的结果。由于我们从方法返回一个元组,我们可以为该元组的结果设置两个不同的变量。