python:异常处理及程序调试

 1、异常概述

  在程序运行过程中,经常会遇到各种各样的错误。这些错误统称为“异常”,在这些一场中有的是由于开发者将关键词写错导致,这类错误产生的是SyntaxError.invalid syntax(无效的语句),浙江导致程序不能正确的运行,这类异常是显示的,开发阶段很容易发现,还右一类隐式的,通常和操作有关。

  除了syntaxerro外,python中还有很多异常,比如

 下面详细介绍python 中提供的异常处理语句。

1、try.........except语句

  在python中提供提供了try.........except语句捕获并处理异常,在使用时,把可能产生的异常代码放在try语句块中,把处理结果放在except语句块中,这样当try语句块中的代码出现错误时,就可以执行except语句块的代码,如果try语句块没有错误,except语句块将不会执行,具体的语法格式如下:

try:
    block1
except[exceptionname [as alisa]]:
    bllock2

参数说明:

block1:表示可能出现的错误代码。

ExceptionName[as alisa]:可选参数,用于指定要捕获的异常,其中,ExceptionName表示要捕获的异常名称,如果在其右侧加上as alisa,则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。

备注:如果在except后面不指定异常的名称,则表示捕获全部异常。

block2:表示进行异常处理的代码块,这里可以输出固定的提示信息,也可以通过别名输出异常的具体内容。

备注:捕获异常后,当程序出错时,输出错误信息后,程序会继续执行。

例子1:幼儿园分苹果.

def division():
    '''功能:分苹果'''
    apple = int(input("请输入苹果个数:"))
    children = int(input("请输入来了几个小朋友"))
    result = apple // children #计算每个人分几个苹果
    remain = apple - result * children#计算余下几个苹果
    if remain > 0:
        print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个,剩下",remain,""  )
    else:
        print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个,剩下",remain,""  )
try:#捕获异常
    division()#调用分苹果函数
except ZeroDivisionError:#护理异常
    print('\出错了 - -! 苹果不能被0个小朋友分!')

  执行以上代码,输入小朋友人数为0时(如果没有异常处理,输入 0时就会报错)。将不再抛出异常。

  目前,我们只处理了证书为0的情况,如果,我们输入的时候不输出整数,会怎么样?

  从上面可以看出,程序要求输入的输入整数,而实际输入的是小数,抛处了ValueError(传入的值错误),要解决该问题,可以在代码中为try....except再添加一个语句用于处理异常的情况。

except ValueError as e:#处理异常
    print('输入值错误。!'e)

备注:在捕获异常时,如果需要同时处理多个异常,也可以用以下代码实现

except(ValueError,ZeroDivisionError)as e:

2、try.....except......else语句

  在python中,还右另一种异常处理结构,他是try......except.....else语句,else用于指定当try语句块中没有发现异常时,需要执行的语句块。该语句块中的内容当try语句发现异常时,将不会被执行。例子就不举了。。。。

3、try.....except......finally

  和else 不同的是,无论程序有无异常发生,finally代码块都会被还行,格式如下

try:
    block1
except [ExceptionName [as alias]]:
    block2
finally:
    block3

4、使用raise语句爆出异常

  如果某个函数或者方法可能会产生异常,但不想在当前函数或者方法中处理这个异常,则可以使用raise 语句在函数或者方法中跑出异常,语法格式如下:

raise [ExcepionName [(reason)]]

  其中,ExceptionName[(reason)],为可选参数,用于指定跑出异常信息的相关描述。如果省略,就会把当前的错误原样抛处。

说明:reason也可以省略,如果省略,则抛处异常时,不附带任何描述信息。

def division():
    '''功能:分苹果'''
    apple = int(input("请输入苹果个数:"))
    children = int(input("请输入来了几个小朋友"))
    if apple < children:
        raise ValueError("苹果太少,不够分")
    result = apple // children #计算每个人分几个苹果
    remain = apple - result * children#计算余下几个苹果
    if remain > 0:
        print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个,剩下",remain,""  )
    else:
        print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个,剩下",remain,""  )
try:#捕获异常
    division()#调用分苹果函数
except ZeroDivisionError:#护理异常
    print('\出错了 - -! 苹果不能被0个小朋友分!')
抛出异常

三、程序调试

  在程序开发过程中,避免不了会出现一些错误。有语法方面的,也有逻辑方面的。对于语法方面的比较好检测,因为程序会直接停止,别切会给出错误提示。而对于逻辑错误就不太容易发现。因为程序可能会一直执行下去,但是结果是错误的。所以作为一名程序员,掌握一定的程序调试方法,是一项必备技能。

  我不喜欢用程序自带的IDLE进行程序调试,因为我用的是pycharm,自带的断点进行debug调试

猜你喜欢

转载自www.cnblogs.com/sunjinchao/p/11989888.html