异常处理 try except Exception else finally raise 自定义异常

时间:2022-12-15 13:31:18
# 异常分为两种:
# 语法异常。
# name # NameError
# if 3 > 2:
#     print(666)
#    print(333)  # IndentationError
# 逻辑异常。
# int(input('>>>'))
# l1 = [1, 2, 3]
# print(l1[100])  # IndexError
# dic = {'name': 'alex'}
# print(dic['age'])  # KeyError
# print(666)
# 异常处理:
# 1,if else...... 对于if语句处理异常只能处理简单的,如果考虑多个条件 不合适。
# try except ...
# 单支情况。 try except
# 尝试着运行try里面的代码,出现错误,按照错误类型去寻找相应的except,找到执行此except代码,然后程序继续运转。
# try:
#     print(111)
#     print(222)
#     print(333)
#     name
#     l1 = [1, 2, 3]
#     print(l1[100])
#
# except NameError:
#     print('name  is not defined')
# print(666)

# 多支情况。try except except except ....
# try:
#     print(111)
#     print(222)
#     print(333)
#     name
#     l1 = [1, 2, 3]
#     print(l1[100])
#     dic = {'name': 'alex'}
#     print(dic['age'])
#
#
# except NameError:
#     print('name  is not defined')
#
# except IndexError:
#     print('索引超出范围....')
#
# except KeyError:
#     print('没有此key...')
#
# print(666)

# 万能处理。
# try:
#     print(111)
#     print(222)
#     print(333)
#     # name
#     l1 = [1, 2, 3]
#     # print(l1[100])
#     dic = {'name': 'alex'}
#     print(dic['age'])
#
# except Exception as e:
#     print(e)
# print(666)
# 万能: 如果你对错误原因不关心,只是想不让其报错,那么程序中你就用万能处理。
# 如果你对错误原因需要进行不同分流或者程序处理,那么就需要多分支。

# 多分支 加 万能处理。 : 对某些错误需要进行分流处理,剩下的错误直接跳过。
# try:
#     print(111)
#     print(222)
#     print(333)
#     # name
#     int(input(''))
#     l1 = [1, 2, 3]
#     print(l1[100])
#     dic = {'name': 'alex'}
#     print(dic['age'])
#
#
# except NameError:
#     print('name  is not defined')
#
# except IndexError:
#     print('索引超出范围....')
#
# except KeyError:
#     print('没有此key...')
#
# except Exception:
#     pass
# print(666)
# try except else
# 如果出现异常 就不会走else逻辑,不出现异常,则执行else逻辑。
# try:
#     print(111)
#     print(222)
#     name
#
# except NameError:
#     print('name  is not defined')
#
# else:
#     print(333)
# print(666)

# try:
#     print('二狗 向 脸哥转了 200元')
#     name
#     print('脸哥确认收到了 200元')
#
# except NameError:
#     print('name  is not defined')
#
# else:
#     print('转账成功')
# print(666)

# try except else finally
# finally 无论报不报错都执行,如果报错,finally是在报错之前执行的!!!
# try:
#     print('二狗 向 脸哥转了 200元')
#     name
#     print('脸哥确认收到了 200元')
#
# except KeyError:
#     print('name  is not defined')
# #
# # else:
# #     print('转账成功')
# #
# finally:
#     print(666)

# 文件操作:
#
# f1 = open('a.log', encoding='utf-8')
# f1.read()
# '''
# 各种对文件操作的代码,但是可能会出错,出错之后,你的文件句柄无法关闭。
# '''
# f1.close()
# 解决方案:
# try:
#     f1 = open('a.log', encoding='gbk')
#     f1.read()
#     f1.write('sfdsf')
#     '''
#     各种对文件操作的代码,但是可能会出错,出错之后,你的文件句柄无法关闭。
#     '''
# finally:
#     print(666)
#     f1.close()

# finally 会在retrurn之前先执行。
# def func(a):
#     try:
#         a += 1
#         return a
#     finally:
#         print(333)
#
# print(func(5))
# 以后如果遇到关闭连接,数据库连接等等。

# 自定义异常处理。

# raise
# raise 666
# python提供了大部分异常,但是不是所有,比如 大的框架的手机连接问题,网络引发的代码问题等等。
# Exception 也处理不了。
#
# EOFError
# NameError
# Exception

# 程序中如果出现了python解决不了的异常 比如 PhoneConnectionError
# class PhoneConnectionError(BaseException):
#     pass
# try:
#     raise PhoneConnectionError('类型错误')
# except PhoneConnectionError:
#     print('手机连接出现问题')
# 源码中经常遇到  条件只要不成立,我就抛出错误
# assert 1 == 2