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调试