欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python——raise引发异常

程序员文章站 2022-04-12 11:23:36
程序出现错误,会自动引发异常,Python也允许使用raise语句自行引发异常。 一、使用raise引发异常 单独一个raise引发异常,默认引发RuntimeError异常,例: raise后带一个异常类,引发指定异常类的默认实例,例: 二、自定义异常类 Python运行自定义异常类,自定义异常都 ......

程序出现错误,会自动引发异常,python也允许使用raise语句自行引发异常。

一、使用raise引发异常

单独一个raise引发异常,默认引发runtimeerror异常,例:

try:
	print ('正在运行try块...')
	raise
	print ('不再运行...')
except exception as e:
	print ('正在运行except块...')

# 运行结果
正在运行try块...
正在运行except块...

raise后带一个异常类,引发指定异常类的默认实例,例:

def test():
	try:
		print ('正在运行try块...')
		raise syntaxerror('引发指定异常...')
		print ('不再运行...')
	except typeerror as e:
		print ('对类型无效的操作...',e)
	except valueerror as e:
		print ('传入无效的参数...',e)
	except syntaxerror as e:
		print ('语法错误...',e)

test()

# 运行结果
正在运行try块...
语法错误... 引发指定异常...

二、自定义异常类

python运行自定义异常类,自定义异常都应该继承exception基类或exception的子类,自定义类大部分情况下都可以采用auctionexception.py类似的代码来完成,只要改变auctionexception异常的类名即可(使类名更准确的描述该异常)。

自定义一个异常类,例:

class customexception(exception):
	pass

def test():
	try:
		raise customexception
	except customexception:
		print ('触发异常...')

test()
# 运行结果
触发异常...

三、except和raise组合使用

当出现一个异常时,单单靠一个方法无法完全处理该异常,必须使用几个方法协作才能完全处理该异常时,就用到except块结合raise语句来完成。

例:

# 自定义异常
class customexception(exception):
	pass

class test:
	def custom(self):
		try:
			aaa
		except exception as e:
			print ('出现异常:',e)
			raise customexception('触发自定义异常~')

def test():
	t = test()
	try:
		t.custom()
	except customexception as e:
		print ('test函数捕获异常;',e)

test()
# 打印
出现异常: name 'aaa' is not defined
test函数捕获异常; 触发自定义异常~

  上面程序中,aaa触发了nameerror异常,执行test类中的except块,打印错误信息后,通知该方法调用者再次处理customexception异常,所以custom()方法的调用者test()函数可以再次捕获customexception异常,把异常详细信息打印出来。