Python学习Day6(上)----初识异常

Python中程序错误通常分为语法错误、运行错误、逻辑错误,前两者错误发生时解释器会终止程序并抛出错误信息,后者不影响程序运行,但无法的到正确的运行结果,对于逻辑错误只能开发者根据结果来调试判断

1.异常概述

1.1 什么是异常?

程序运行时,如果Python解释器遇到错误,终止程序运行,并打印错误信息,即异常。解释器执行的的这个过程称抛出异常。程序开发过程中很难将所有运行情况都进行处理,通过捕获异常可以针对某些特殊事件进行集中处理,提高程序的稳定性和健壮性。

1.2 捕获异常

捕获异常的语法:

try:
    #可能发生异常的代码块
    pass
except:
    #如果发生异常,则在此进行处理,
    pass
  • 1.2.1 异常类型
    常见的异常如除零异常(ZeroDivisionError)、数据类型错误使用(ValueError)等都继承自ExceptError,一般情况下对Exception进行捕获能捕捉到所有类型的异常,也可单独针对某种异常类型进行处理,使用finally语句,则无论是否发生异常,都一定会执行该语句块:
try:
    pass
except (type1, type2, type3):
    pass

对任何异常捕获:

try:
    print('可能发生异常')
except Exception as e: #最终的异常,所以异常继承自Exception
    print('发生了未知错误{}'.format(e))
finally:
    print('无论异常是否发生,都会执行')
  • 1.2.2 异常传递
  • 异常发生后,会传递给方法(函数)的调用者A, 如果A有捕捉到该异常,则按照捕捉机制处理,如果A没有捕捉该异常,则会层层向上传递最终会传递到Python解析器。
  • 在开发中,可以在主函数中捕获异常,这样在主函数中调用其他函数,出现异常都会传递到主函数,而不用在其他函数中添加异常捕获,保证代码的整洁

2.引发异常----raise语句

实际开发中除了运行错误Python解释器会自己抛出异常,还可以根据需求主动抛出异常。

  • raise语句
def fun():
    raise Exception('主动抛出了异常')
fun()
>>>   Exception: 主动抛出了异常

3.自定义异常

自定义异常需要继承父类ExceptError,通过自定义异常可以对自己的代码异常进行分类管理,如下例子

  • 模拟用户登录,用户名不是jsl则报错
#自定义异常
class ParamInvalidException(Exception):
    def __init__(self, code, msg):
        self.code = code
        self.msg = msg

def login(username):
    if username != 'jsl':
        raise ParamInvalidException(2002, '用户名错误')
    print('登陆成功')

try:
    login('jl')
    print('后继操作')
except ParamInvalidException as e:
    print(e.code, e.msg)
>>> 2002 用户名错误

你可能感兴趣的:(Python学习Day6(上)----初识异常)