Python学习笔记 27

异常

程序中出现异常程序就会终止,如果这个错误无关紧要,可以捕获异常,让程序继续运行下去,这时候就需要异常处理
关键词:try,except ,else,finally

try:
    代码块(可能出错的语句)
except 异常类型 as 异常名:
    代码块(出错以后的处理方式)
except 异常类型 as 异常名:
    代码块(出错以后的处理方式)
....
else:
    代码块(没出错误时执行的语句)
finally :
    代码块(无论出不出现异常都会执行)
# 异常
# 程序运行中,一旦出现异常会导致程序立即终止,异常以后的代码全部都不会执行!

# 处理异常:
# try:
#     代码块(可能出错的语句)
# except 异常类型 as 异常名:
#     代码块(出错以后的处理方式)
# except 异常类型 as 异常名:
#     代码块(出错以后的处理方式)
# ....
# else:
#     代码块(没出错误时执行的语句)
# finally :
#     代码块(无论出不出现异常都会执行)

# try必须有,else有没有都可以
# except和finally至少有一个


try:
	print(10/0)
except:
	print('程序出错了。。')
else:
	print('程序正常执行。。')
print('- '*40)

# 异常的传播
# 当函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播
# 	如果没有对异常处理,则异常会继续向函数调用处传播

# 当程序运行过程出现异常以后,所有异常信息会被保存一个专门的异常对象中,
# 	而异常传播时,实际上就是异常对象抛给了调用处

def fn1( ):
	print('hello fn1')
	print(10/0)

def fn2( ):
	print('hello fn2')
	fn1( )

def fn3( ):
	print('hello fn3')
	fn2( )

fn3( )

异常处理

except 异常类型 as 异常名:
except 异常类型 可以捕获该类型的异常,as xx 将错误信息存在xx中
raise 异常类型 抛出异常

print('异常出现前~')

o = [ ]
try:
	print(c)
	a + 'ku'
	o[9]
	print( 10/0 )
except NameError as e:
	# 可以在异常类后面跟着一个 as xx ,此时 xx 就是异常对象里的错误信息
	# e 里面就是 name 'c' is not defined
	print('出现了 NameError 错误',e,type(e) )
except ZeroDivisionError:
	print('出现了 ZeroDivisionError 错误')
except Exception:
	# Exception 是所有异常的父类,它会捕获所有异常,效果和直接用 except: 一样
	print('出现其他异常')
# 类似于 else if,else 的结构

else :
	print('没出错误时执行的语句')
finally :
	print('无论出不出现异常 finally 都会执行')

print('异常出现后~')

print('- '*40)


# 抛出异常(raise)

# 自定义异常类,只需要创建一个类继承Except即可:
class MyError(Exception) :
	pass

def add(a,b) :
	# 如果a和b中有负数,就抛出异常
	if a<0 or b<0 :
		# raise 用于向外部抛出异常,后面可以跟一个异常类,或者异常类的实例
		
		# raise Exception
		# raise Exception('两个参数中不能有负数')
		# Exception: 两个参数中不能有负数

		raise MyError('自定义异常 MyError,两个参数中不能有负数')
		# __main__.MyError: 自定义异常,两个参数中不能有负数

		# return None
		# if 也可以做到类似的效果,但抛出异常具有强制作用,不改错误程序就运行不下去
	r = a+b
	return r

print( add(-1,3) )





猜你喜欢

转载自blog.csdn.net/weixin_44011689/article/details/90083832