python初学者:在异常之前尝试两件事?

2024-09-28 22:25:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个脚本,它接受数字的输入,然后进行检查以查看

(a)输入实际上是一个数字,以及 (b) 所讨论的数字小于或等于17。在

我尝试过各种各样的“如果”语句都没有结果,而现在我正试图把我的脑袋绕在“try”语句上。这是我迄今为止最好的尝试:

def listlength():
    print "How many things (up to 17) do you want in the list?"
    global listlong
    listlong = raw_input("> ")
    try:
        listlong = int(listlong)
        listlong <= 17
    except:
        print "Gotta be a number less than 17, chumpy!"
        listlength()
    liststretcher()

它适用于try中的第一个元素:如果它不是数字,我必须再次运行listlength函数。但第二个元素(<;=17)被完全忽略。在

我也试过了

^{pr2}$

…但这仍然只给了我一个功能性的第一个检查,而完全忽略了第二个检查。在

如果我有两个try语句,也会得到相同的结果:

    try:
        listlong = int(listlong)
    except:
        print "Gotta be a number, chumpy!"
        listlength()
    try: 
        listlong <=17
    except: 
        print "Gotta be less than 17!"
        listlength()
    liststretcher() 

有没有一种方法可以尝试:检查两件事,并要求这两件事都通过,然后才能越过异常?或者,在转到liststretcher()命令之前,是否必须在同一定义中创建两个不同的try:语句?在

对于S.Lott的回应,下面:我的意图是“try:listlong<;=17”将检查“listlong”变量是否小于或等于17;如果检查失败,它将移动到“except”;如果它通过,它将转到下面的liststretcher()。在

读到目前为止的答案,我有八件事要跟进。。。在


Tags: number数字语句beintlessprinttry
3条回答

您将需要使用if语句来检查关系,并在适当的情况下手动引发异常。在

您缺少的是,以及S.Lott试图引导您找到的是,listlong <= 17语句没有引发异常。它只是一个条件表达式,产生True或False,然后忽略这个值。在

您的意思可能是assert( listlong <= 17 ),如果条件为False,它将抛出一个AssertionError异常。在

你有大部分答案:

def isIntLessThanSeventeen(listlong):
    try:
        listlong = int(listlong) # throws exception if not an int
        if listlong >= 17:
            raise ValueError
        return True
    except:
        return False

print isIntLessThanSeventeen(16) # True
print isIntLessThanSeventeen("abc") # False

相关问题 更多 >