Python基础知识_第9节

1389-李同学

发表文章数:35

首页 » Python » 正文

异常

异常机制的本质

  • 异常处理:程序在出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序执行。
  • 使用Python异常机制的好处:
    • 把逻辑代码和异常处理代码分开
    • 不需要考虑复杂的例外情况
  • Python中内建异常类的继承层次:常见错误类型多为Exception的子类。
    Python基础知识_第9节

try…一个except结构

try:
	被监控的、可能引发异常的语句块 
except BaseException[as e]: 	# BaseException所有异常的父类;把异常储存为e对象
	异常处理语句块
try: 
	print("step1") 
	a = 3/0 
	print("step2") 
except BaseException as e: 
	print("step3") 
	print(e)

print("step4")
# step1 
# step3 
# divisionbyzero 
# step4

try…多个except结构

try:	
	被监控的、可能引发异常的语句块 
except Exception1:	
	处理Exception1的语句块 
except Exception2: 
 	处理Exception2的语句块 
...
except BaseException:
	处理可能遗漏的异常的语句块 
  • 处理多个异常,按照先子类后父类的顺序。
  • 通过左键单击查看异常名称的Diagram可以分辨出来异常的子类、父类从属。

try…except…else结构

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

try…except…finally结构

  • finally块无论是否发生异常都会被执行。通常用来释放try块中申请的资源。
try: 
	f = open("d:/a.txt",'r') 
	content = f.readline() 
	print(content) 
except: 
	print("文件未找到") 
finally: 
	print("run in finally,关闭资源")
	try:			# 如果文件不存在,则下面的命令会报错,因此使用try except来解决。
		f.close() 	# 释放资源。此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行。
	except BaseException as e:
		print(e)	
print("程序执行结束!")
# 文件未找到
# run in finally,关闭资源
# 程序执行结束!

return 语句和异常处理问题

  • 一 般不将return语句放到try、except、else、finally块中,会发生一些意想不到的错误。建议放到方法最后。

常见异常的解决

  • AttributeError:访问对象的不存在的属性
  • KeyError:字典的关键字不存在

with 上下文管理

  • With结构可以自动管理资源,在with代码块执行完毕后,无论是否有异常,自动还原进入该代码之前的content,保证资源正常释放。
  • 常用于文件操作、网络通信
with open("d:/bb.txt") as f: 
	for line in f: 
		print(line)

trackback 模块(将异常写入日志文件)

# coding= utf-8 
import traceback
try: 
	print("step1") 
	num = 1/0 
except: 
	with open("d:/a.log","a") as f: 					
		traceback.print_exc(file=f)	

@自定义异常类

  • 通常继承Exception或其子类即可。命名一般以Error、Exception为后缀。由 raise 语句主动抛出。
class AgeError(Exception):	# 继承Exception 
	def __init__(self,errorInfo): 
		Exception.__init__(self) 
		self.errorInfo = errorInfo 
	def __str__(self): 
		return str(self.errorInfo)+",年龄错误!应该在 1-150 之间"

############测试代码################ 
if __name__ == "__main__": 	# 如果为True,则模块是作为独立文件运行,可以执行测试代码 
	age = int(input("输入一个年龄:")) 
	if age<1 or age>150: 
		raise AgeError(age) 
	else: 
		print("正常的年龄:",age)
# 输入一个年龄:200
# Traceback(most recent call last): 
# 	File"C:/Users/Administrator/PycharmProjects/mypro_exception/my10.py",line16,in<module> 
# 		raiseAgeError(age) __main__.AgeError:200,年龄错误!应该在 1-150 之间
# __main__.AgeError:200,年龄错误!应该在 1-150 之间

Pycharm 开发环境的调试(debug模式)

  • debug模式快捷键:shift+F9
    • 左边帧,右边变量
  • 断点:断点处暂停
  • step over:若当前执行的是一个函数,则会把这 函数当做整体一步执行完。不会进入这个函数内部。
  • step into:若当前执行的是一个函数,则会进入这个函数内部。
  • step out:当单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。
  • run cursor:一直执行,到光标处停止,用在循环内部时,点击一次就执行一个循环。

未经允许不得转载:作者:1389-李同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Python基础知识_第9节》 发布于2020-11-09

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录