python程序引发异常

时间:2016-08-04 14:40:33

标签: python exception raise

我正在进行从Guttag Intro到计算机科学和使用python编程的手指练习,我正在进行以下手指练习:

手指练习:实现满足规范的功能 def findAnEven(l): “”假设l是一个整数列表 返回l中的第一个偶数 如果l不包含偶数“”“

,则引发ValueError

这是我到目前为止写的,它完成了工作,但绝对不是Guttag想要的答案。

   def isEven(l):
        """Assumes l is a list of integars
           returns the first even number in list
           raises an exception if no even number in list"""
        for i in l:
            if i % 2 == 0:
                print i, " is the first even number in the list"            
                exit()
        raise ValueError("No even numbers in list!")

我非常感谢关于Guttag教授如何看待代码的任何意见。我假设我应该在某处使用try语句,并且在此上下文中使用exit语句非常粗略。提前谢谢。

3 个答案:

答案 0 :(得分:1)

您的代码存在的问题是exit()的使用。通常return将退出给您。要修复代码,只需删除它:

def isEven(l): 
        for i in l: 
                if i % 2 == 0: 
                        return i 
        raise ValueError("No even numbers in list!") 

答案 1 :(得分:0)

我正在使用try-except:

回答这个问题
def findEven(L):
    try:
        for num in L: 
            if num%2==0:
                return num
        else:
            num/0
    except:
        raise ValueError

要输入except块,try块中需要有错误。我专心地在try块中添加了一个零除法运算,以便在没有找到偶数的情况下产生ZeroDivisionError。此错误允许执行异常块。希望它在同样的情况下帮助其他人。

答案 2 :(得分:0)

我也在研究这部分。这是我的代码:

def findEven(L):
    try:
        for num in L: 
            if num%2==0:
            return num
            else:
                num/0
    except ZeroDivisionError:
        print("No even numbers in list!")
    except:
        raise ValueError("findEven called with bad arguments")

我发现如果不使用ZeroDivisionError,IDLE Shell会先显示ZeroDivisionError,然后再显示这一行

During handling of the above exception, another exception occurred: