python面向对象07/异常处理

Posted liubing8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python面向对象07/异常处理相关的知识,希望对你有一定的参考价值。

python面向对象07/异常处理

1.异常错误分类

语法错误:
# if 2 > 1
#     print(222)
#
# dic = 'name'; 'alex'
# tu = (2, 3, 4'' 6 )
    
逻辑错误:
# num = int(input('请输入数字'))
# dic = 'name': '海狗', 'age': 18
# dic['hobby']

2.什么是异常?

代码发生异常之后,程序就会中断!

3.异常处理

当代码出现异常时,通过某种方式不让程序中断,合理的跳过去.

4.为什么要有异常处理?

1.用户体验良好
2.使代码更有健壮性、容错性

5.异常处理的两种方式

5.1 if判断

利用if 只能处理简单的异常,如果异常需要考虑的方面比较多,不合适

5.2 try

利用try的方式进行异常处理,try会尝试执行里边的代码
# 进行一个try举例;

# try:
#     num = int(input('>>>'))  # 出现ValueError错误之后,直接跳转到except语句.
#     print(111)
# except ValueError:
#     print(666)


# try:
#     dic = 'name': '二狗'
#     print(dic['age'])
#     num = int(input('>>>'))  # 出现ValueError错误之后,直接跳转到except语句.
#     print(111)
# except ValueError:
#     print(666)

结构一:
    单分支
# try:
#     num = int(input('>>>'))  # 出现ValueError错误之后,直接跳转到except语句.
#     dic = 'name': '二狗'
#     print(dic['age'])
#
#     print(111)
# except ValueError:
#     print(666)

结构二:    
    多分支
# try:
#     num = int(input('>>>'))  # 出现ValueError错误之后,直接跳转到except语句.
#     dic = 'name': '二狗'
#     print(dic['age'])
#     l1 = [1, 2]
#     print(l1[100])
#     print(111)
# except ValueError:
#     print('输入的有非数字元素')
# except KeyError:
#     print('没有此键')
# except IndexError:
#     print('没有此下标')
# print(666)

结构三:
    万能异常:处理所有Python识别的异常
    什么时候用万能,什么时候用多分支?
        如果你对错误信息不关心,只是想要排除错误,让程序继续运行
        如果你对错误信息要进行明确的分流,让你的程序多元化开发
# try:
#
#     dic = 'name': "二狗"
#     # print(dic['age'])
#     l1 = [1, 2]
#     print(l1[100])
#     print(111)
#     for i in 123:
#         pass
#
# except Exception as e:
#     print(e)
# print(666)

# 之前的写法:
# num = input('输入序号')
# if num.isdecimal():
#     num = int(num)
#     if 0 < num < 5:
#         if num == 1:
#             pass # func()
# else:
#     print('请输入数字')

# def func():
#     pass
#
# def func1():
#     pass
#
# dic = 
#     1: func,
#     2: func1,
# 
#
# try:
#     num = int(input('请输入序号'))
#     dic[num]()
# except ValueError:
#     print('请输入数字')
# except KeyError:
#     print('请输入范围内的序号')

结构四:
    多分支 + 万能异常
# def func():
#     pass
# def func1():
#     pass
# dic = 
#     1: func,
#     2: func1,
# 
#
# try:
#     num = int(input('请输入序号'))
#     dic[num]()
# except ValueError:
#     print('请输入数字')
# except KeyError:
#     print('请输入范围内的序号')
# except Exception:
#     print('程序出现意料之外的错误....')

结构五: try else finally
    else:如果没有出现异常,则执行else
    except:必须依赖try, else:必须依赖except和try
    finally:只是依赖于try
    finally 在异常出现之前,执行finally语句
        应用:
            1.用在关闭数据库连接,文件句柄关闭,数据保存,用到finally
              可以在finally后边用with open 将文件写进去
            2.在return结束函数,执行finally代码
# try:
#     dic = 'name': '二狗'
#     # print(dic['age'])
#     l1 = [1, 2]
#     # print(l1[100])
#     print(111)
# except KeyError:
#     print('没有此键')
# except IndexError:
#     print('没有此下标')
# else:
#     print('如果没有出现异常则执行这里')
# finally:
#     print('finally 666')
# except 必须依赖于try, else必须依赖于except和try
# finally只是依赖于try.

# finally : 在异常出现之前,执行finally语句.
# try:
#     dic = 'name': '嘉欣'
#     print(dic['age'])
#     l1 = [1, 2]
#     print(l1[100])
# # except KeyError:
# #     print('没有此键')
# # except IndexError:
# #     print('没有此下标')
# # except IndexError:
# #     pass
# # print(111)
# finally:
#     print('finally 666')

# finally 用在 关闭数据库连接,文件句柄关闭,数据保存等,用到finally.

# with open('test1',encoding='utf-8',mode='r+') as f1:
#     try:
#         for i in f1:
#             print(i)
#         if ....:
#     finally:
#
#         f1.close()

# 在return结束函数之前,执行finally代码.
# def func():
#     try:
#         print(111)
#         return 666
#     finally:
#         print(222)
# print(func())

结构六:
    主动触发异常
    raise ValueError (出现了value错误)
    
结构七:
    断言,展示出一种强硬的态度
    assert 条件,assert a == b
    条件不成立直接报错 AssertionError
# assert 条件
# name = 'alex'
# n1 = input('请输入:')
# assert name == n1
# print(111)
# print(222)    

结构八:
    自定义异常:
    Python中给你提供的错误类型有很多,但是不是全部的错误
    Python会报所有错误信息,但是没有错误的类型
input() 可以使用异常捕获,别的地方慎用
# class LeError(BaseException):
#
#     def __init__(self,msg):
#         self.msg=msg
#     def __str__(self):
#         return self.msg
#
# try:
#     # 三行
#     raise LeError('socket.connent.....')
# except LeError as e:  # e = LeError('类型错误')
#     print(e)

#   socket.connent .....

# EOFError
# ValueError

以上是关于python面向对象07/异常处理的主要内容,如果未能解决你的问题,请参考以下文章

python 面向对象专题:异常处理

python异常处理和面向对象编程总结

Python----面向对象异常处理反射单例模式

Python面向对象之异常处理

python面向对象--异常处理

Python----面向对象---异常处理