Python基础教程:异常处理

文章目录

  • 前言
  • 一、异常处理机制
  • 二、异常处理基本结构
    • 1.基本结构
    • 2.常见异常类
    • 3.捕捉多个异常
    • 4.try…finally终止行为
    • 5.主动引发异常
    • 6.自定义异常类
  • 总结

前言

  异常处理是Python的一种高级工具,当异常发生时,程序会停止当前的所有工作,跳转到异常处理部分去执行。异常既可以是程序错误引发的,也可以是由代码主动触发

一、异常处理机制

  Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

二、异常处理基本结构

1.基本结构

代码如下:

try:
	可能引发异常的代码
except 异常类型名称:
	异常处理代码
else:
	没有发生异常时执行的代码
  在处理异常时,将可能引发异常的代码放在try语句块中。在except语句中指明捕捉处理的异常类型名称,except语句块中为发生指定异常时执行的代码。else语句块中为没有发生异常时执行的代码,else部分可以省略。

2.常见异常类

  1. AttributeError:访问对象属性时引发的异常,如属性不存在或则不支持赋值等;
  2. EOFError:使用input()函数读文件时,遇到文件结束标志EOF时发生的异常。文件对象的read()和readline()方法遇到EOF时返回空字符串,不会引发异常;
  3. ImportError:导入模块出错引发的异常;
  4. IndexError:使用序列对象的下标超出范围时引发的异常;
  5. StopIteration:迭代器没有进一步可迭代元素时引发的异常;
  6. IndentationError:使用了不正确的缩进时引发的异常;
  7. TabError:使用Tab键和空格缩进时不一致引发的异常;
  8. TypeError:在运算或函数调用时,使用了不兼容的类型时引发的异常;
  9. ZeroDivisionError:除数为0时引发的异常。

3.捕捉多个异常

   1、在异常处理结构中,可以使用多个except语句,已捕捉可能出现的多种异常。

代码示例如下:

x=[1,2]
try:
	x[0]/0
except ZeroDivisionError:
	print("除0错误")
except IndexError:
	print("索引下标超出范围")
else:
	print("没有错误")
   2、可以在except语句中同时指定多种异常,以便使用相同的异常处理代码进行统一处理。在except语句中可以使用as为异常类创建一个实例对象。

代码示例如下:

x = [1,2]
try:
	x[0]/0
except ZeroDivisionError as err:
	print("程序运行出错,错误信息如下:")
	print("异常类型:",err.__class__.__name__)
	print("异常信息:",err)

4.try…finally终止行为

  在异常处理结构中,可以使用finally定义终止行为。不管try语句块中是否发生异常,finally语句块中的代码都会执行。 代码示例如下:
def function():
	try:
		print(5/0)
	except:
		print("出错了")
	finally:
		print("finally部分已执行")    #不管是否发生异常都会执行
	print("程序运行结束")
function()     #执行函数

5.主动引发异常

  并非只有在程序运行出错时才可引发异常,Python允许在代码中使用raise或assert语句主动引发异常。

5.1、raise语句基本格式如下:

raise 异常类名
raise 异常类实例对象
raise

raise语句基本用法如下:

 # 1、类名引发异常
raise IndexError    
# 2、创建异常类的实例对象后引发异常
x = IndexError()
raise x
# 3、不带参数的raise语句可再次引发刚刚发生过的异常,其作用就是向外传递异常
try:
	raise IndexError   #引发异常
except:
	print("程序运行出错了")
	raise         #再次引发异常
# 4、在使用raise语句引发异常时,可以为异常类指定描述信息
raise IndexError("索引下标超出范围")
# 5、异常链:异常引发异常
#可以使用raise…from…语句,使用异常来引发另一个异常
try5/0
except Exception as x:
	raise IndexError("下标越界")from x  #引发另一个异常

5.2、assert语句基本格式如下:
  assert语句在“测试表达式”的值为假时,引发AssertionError异常,data作为异常描述信息。

assert测试表达式,data

assert语句基本用法如下:

tryimport math
	x = 5
	assert x>=0,'参数x必须是非负数'
except Exception as err:
	print("程序运行出错,错误信息如下:")
	print("异常类型:",err.__class__.__name__)
	print("异常信息:",err)

6.自定义异常类

  自定义异常类可以提供常规异常处理之外的自定义操作。
   所有异常类独有共同的超类:BaseException、Exception。

  1. BaseException类是所有异常类的顶级超类。不能直接继承BaseException类来定义自己的异常类;BaseException类的唯一子类是Exception类。BaseException类为子类提供了默认的打印和状态保持行为。在创建异常类实例对象时,可以用一个字符串作为异常描述信息。在打印异常类实例对象时,显示异常描述信息。
  2. Exception类是其他所有Python内置异常类的超类,除了GeneratorExit、KeyboardInterrupt和SystemExit。通常用户自定义的异常类均使用Exception类作为超类。在使用try语句处理异常时,可指定捕捉Exception异常,而不是空的except。这样可以更明确的捕捉异常,并可通过异常实例对象获得更多信息。

总结

  异常可以在程序运行过程中进行捕捉,进行处理,从而避免程序意外崩溃。对程序执行异常处理,是一种良好的编程习惯。

你可能感兴趣的