Python基础之day10-异常
代码仓库地址: https://gitee.com/andox_yj/python
一、异常介绍
- 错误与异常介绍
- 错误:指Python的语法错误,不能被python解析。错误使程序运行不了。
- 异常:即便Python程序的语法是正确的,在运行它的时候也有可能发生错误。运行期检测到的错误被称为异常。
- 代码示例
# ################# 错误 #################### # for in range(10): # ################# 异常 #################### num = 10 * (1 / 0) # 0 不能作为除数,触发异常 # Traceback (most recent call last): # File "<stdin>", line 1, in ? # ZeroDivisionError: division by zero num = 4 + spam * 3 # spam 未定义,触发异常 # Traceback (most recent call last): # File "<stdin>", line 1, in ? # NameError: name 'spam' is not defined num = '2' + 2 # int 不能与 str 相加,触发异常 # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # TypeError: can only concatenate str (not "int") to str
二、异常处理之捕获异常
- try except 介绍
- 使用try except语句可以捕获异常,try except可以配合else或finally一起使用。
- try可以配合多个except一起使用。
- except 后面可以不写异常类型,既所有异常类型都执行后面代码
- 可以嵌套使用,既try里面可以嵌套try,except里面也可以嵌套一个try
- 代码示例
""" 用法: try: 需要捕获异常的代码块 except 异常类型1 as 异常对象1: 该异常类型的处理 except 异常类型2 as 异常对象2: 该异常类型的处理 else: 出现异常且不为以上错误类型的处理 finally: 不管出没出现异常,最终都执行的代码 """ # ################# try except else finally #################### try: runoob() except Exception as e: print(e) # name 'runoob' is not defined else: try: with open('file.log') as file: read_data = file.read() except FileNotFoundError as fnf_error: print(fnf_error) finally: print('这句话,无论异常是否发生都会执行。') # 这句话,无论异常是否发生都会执行。
三、异常处理之断言
- assert断言介绍:当程序满足或不满足某个条件后,认为的抛出一个异常,避免等程序运行到后面的时候再报错。
- assert用法:
assert 表达式
(当条件为真时,不触发异常,当条件为假时,触发异常)# ################# assert基本使用 #################### def zero(num): assert num != 0 # 此行报错 print(1 / num) zero(0) # ################# assert与try一起使用 #################### try: # 当表达式为False是,触发异常被try捕获 assert 3 > 4 except: print('发生了异常')
四、异常处理之触发异常
- assert断言介绍:当程序满足或不满足某个条件后,认为的抛出一个异常,避免等程序运行到后面的时候再报错。
- assert用法:assert 表达式 (当条件为真时,不触发异常,当条件为假时,触发异常)
- 代码示例
# ################# assert基本使用 #################### def zero(num): assert num != 0 print(1 / num) zero(0) # ################# assert与try一起使用 #################### try: # 当表达式为False是,触发异常被try捕获 assert 3 > 4 except: print('发生了异常')
五、自定义异常
- 介绍:自定义异常就是将一个类继承于Exception类,可以定义自己的属性。然后使用raise触发这个自定义的类,既:raise 类名
- 代码示例
class ShortInputException(Exception): """自定义的异常类,继承Exception""" def __init__(self, length, at_least): super().__init__() # 初始化父类init,这样代码不易报错 self.length = length self.at_least = at_least try: # 1.输入一个字符串 character = input('请输入:') # 2.如果输入的字符串长度小于3 if len(character) < 3: # 3.raise引发一个定义的异常类,传入两个参数 raise ShortInputException(len(character), 3) # 使用try捕获这个异常,异常类型为类名,最后as取个别名 except ShortInputException as result: # result这个变量被绑定到了错误的实例 print('ShortInputException: 输入的长度是 %d,长度至少应是 %d' % (result.length, result.at_least)) else: print('没有异常发生.')