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调试
python:异常处理及程序调试的更多相关文章
- 笔记:Python异常处理与程序调试
Python异常处理与程序调试 Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性.异常处理还具有释放对象,中止循环的运行等作用.在程序运行的过程中,如果发生了错误,可以返回事先约 ...
- 零基础学Python--------第9章 异常处理及程序调试
第9章 异常处理及程序调试 9.1 异常概述 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”.这些异常有的是由于开发者将关键字敲错导致的,这类错误多数产生的是SyntaxError ...
- Python异常处理机制、调试、测试
类似于Java的try..catch..finally Java的为try_except_finally try: print('try...') r = / print('result:', r) ...
- Day12 Java异常处理与程序调试
什么是异常? 不正常的,会影响程序的正常执行流程. 例如下面的程序 public static void main(String[] args) { TestDemo1 t = new TestDem ...
- [Python学习笔记][第八章Python异常处理结构与程序调试]
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...
- python学习笔记(六)——程序调试
在我们平时编写程序时,常常会遇到各种错误,俗称BUG.而我们程序猿的工作常常需要对程序进行调试,也就是所谓的debug. 程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法 ...
- python -- 程序异常与调试(程序调试)
一.程序调试 A.使用assert语句检测程序代码中的错误. assert 表达式[, 参数] 如果表达式为True,则继续往下运行:如果为False,则抛出一个AssertionError异常,并且 ...
- Python 异常处理
Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...
- 转 Python3 错误和异常/ Python学习之错误调试和测试
########sample 0 https://www.cnblogs.com/Simon-xm/p/4073028.html except: #捕获所有异常 except: <异常名> ...
随机推荐
- JAVA学习之面向对象
面向对象是相对面向过程而言面向过程:强调的是功能行为面向对象:将功能封装进对象,强调具备了功能的对象 不论面向对象还是面向过程都是一种开发思想而已.举一个例子来理解面向对象和面向过程把大象装进冰箱分三 ...
- upc组队赛3 Iranian ChamPions Cup
Iranian ChamPions Cup 题目描述 The Iranian ChamPions Cup (ICPC), the most prestigious football league in ...
- 【Vue】---Vue.config常用配置项
一.前言 Vue-cli3 搭建的项目 相比较Vue-cli2界面相对较为简洁,之前的build和config文件夹不见了,那么应该如何配置 如webpack等的配呢? 二.基本配置 只需要在项目的根 ...
- Django框架(二十一)—— Django rest_framework-权限组件
目录 Django rest_framework-权限组件 一.权限组件的使用 1.使用语法 2.全局使用.局部使用.局部禁用权限 二.源码分析 1.Book中没有as_view 2.APIView的 ...
- 【纯净软件】三款照片EXIF信息删除软件 Clear Exif、JPEG & PNG Stripper、Easy Exif Delete 非专业横向对比
商业软件:需支付费用后方可使用. 共享软件:需支付费用,但可以先免费试用(有使用期限.功能限制). 免费软件:无需支付费用,无使用期限,无功能限制. 纯净软件:无广告.无联网行为的免费软件. 自由软件 ...
- CentOS 7.4安装telnet服务端
CentOS 7.4安装telnet服务端 安装xinetd服务 # yum -y install xinetd 安装telnet-server # yum -y install telnet-ser ...
- USACO 2014 US Open Odometer /// 枚举
题目大意: 给定区间 l r 求区间包含多少个数 它们各个位的数只有一个不一样 注意 多个位但多个数为0单个数为x的情况 这种情况只有 x000 即把单个数放在首位才是正确的 同样注意 多个位但单个数 ...
- ionic ios上状态栏和app重叠解决方案
干货文章 ·2018-03-22 01:33:01 官方issues: https://github.com/ionic-team/ionic/issues/13294 解决办法: 1.在 confi ...
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
有两种实现方法,分别是继承Thread类与实现Runnable接口用synchronized关键字修饰同步方法反对使用stop(),是因为它不安全.它会解除由线程获取的所有锁定,而且如果对象处于一种不 ...
- Splay(区间翻转)&树套树(Splay+线段树,90分)
study from: https://tiger0132.blog.luogu.org/slay-notes P3369 [模板]普通平衡树 #include <cstdio> #inc ...