PYTHON 基础-DAY9 20210410

异常的本质

  • 异常:程序运行过程中出现的非正常现象。
  • 异常处理:程序出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序的进行。
  • 异常类:用来描述和处理异常的类,异常类定义中包含了该类异常的信息和对异常进行处理的方法。
  • python中一切都是对象,异常也是采用对象的方式来处理,处理的过程:
    1)抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给解释器。
    2)捕捉异常:当解释器得到该异常后,寻找相应的代码来处理异常
    在这里插入图片描述

try—except结构

try—一个except结构

try:
	被监控的可能引发异常的语句块
except BaseException[as e]:
	异常处理语句块
  • try块包含可能引发异常的代码,except块用来捕捉和处理发生的异常。BaseException所有异常根类。

try—多个except结构

  • 捕捉可能出现的多个异常(先子类后父类的顺序),并针对性的写出异常处理的代码。为了避免遗漏可能出现的异常,可以在最后增加BaseException。
try:
	被监控的、可能产生异常的语句块
except Exception1:
	处理Exception1的语句块
except Exception2:
	处理Exception2的语句块
。。。
exception BaseException:
	处理可能遗漏的异常语句块

try…except…else结构

  • 执行顺序:若有try块中没有抛出异常,则执行else块;如果try块抛出异常,则执行except块,不执行else块

try…except…finally结构

  • try…except…finally结构中,finally块无论是否异常都会执行,用来释放try块申请的资源

常见异常汇总

return语句和异常处理问题

  • return语句的两种作用:结束方式运行、返回值。一般不把return语句放在异常处理结构中,而是放在方法最后

常见异常的解决

  • SyntaxError:语法错误
  • NameError:尝试访问一个没有声明的变量
  • ZeroDivisionError:除数为0错误(零除错误)
  • ValueError:数值错误
  • TypeError:类型错误
  • AttributeError:访问对象的不存在的属性
  • IndexError:索引越界异常
  • KeyError:字典的关键字不存在

with上下文管理

  • with语法结构:with context_expr [as var]: 语句块
  • with上下文管理可以自动管理资源,在with代码块执行完毕后自动还原进入该代码之前的现场或上下文。不论何种原因跳出with块,无论是否有异常,总能保证资源的正常释放、极大的简化工作,在文件操作、网络通信相关的场合非常常用。

traceback模块

#使用traceback模块打印异常信息
import traceback
try:
	print("step1")
	num=1/0
except:
	traceback.print_exc()

#将异常信息输出到指定文件中
try:
	print("step1")
	num=1/0
except:
	with open("d:/a.txt","a") as f:
			traceback.print_exc(file=f)

自定义异常类

  • 自定义异常类:运行时异常,通常继承Exception或其子类即可。命名一般以Error、Exception为后缀
  • 自定义异常由raise语句主动抛出
#测试自定义异常类
class AgeError(Exception):
	def __init__(self,errorInfo):
		Exception.__init__(self)
		self.errorInfo=errorInfo
	def __str__(self):
		return self.errorInfo+"年龄错误!"
#测试代码
if __name__="__main__": #如果为Ture,则模块为独立文件执行,可以测试代码
	age=input("输入一个年龄:")
	if age<1 or age>150:
		raise AgeError(age)
	else:
		print("正常的年龄")

pycharm开发环境的调试

  • 调试的核心是:设置断点,即程序执行到此处,暂时停止执行。
    -设置断点:在行号后面单击即可增加断点;在断点上在淡季即可取消断点
    -进入调试视图:单击工具栏上的按钮;右键单击编辑区,点击:debug模块名;快捷键shift+F9
    调试视图左侧为浏览帧<调试器列出断点处,当前线程正在运行的方法,每个对应一个栈帧,最上面是当前断点所处的方法>,右侧为变量观察区<列出断点处所在方法相关的变量值>
  • 调试操作区的按钮的含义:
    show Execution Point:显示当前所有断点
    step over:单步调试,遇到函数跳过。即当前执行是一个函数,则会把函数当成整体一步执行完,不会进入函数内部。
    step into:单步调试,遇到函数进入。即当前执行的是一个函数,则会进入这个函数内部。
    step out:跳出函数。当单步执行到了函数内时,用step out就可以执行完函数剩下的部分,并返回上一层函数
    run to cursor:一直执行到光标停止,用在循环内部时,点击一次就执行一次循环。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值