python 理论(六)

# -- coding: utf-8 --
# @Time : 2022/9/6 13:49
# @Author : siyu.yang
# @desc  第六章  python异常处理
                                    # python 异常处理基本概念
# 异常处理:
#    异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常
# 状况(即超出程序正常执行流程的某些特殊条件)如:文件找不到、网络连接失败、非法参数等。
# 异常是一个事件,它发生再程序运行期间,干扰了正常的指令流程。
#    一般情况下,在python无法正常处理程序时就会发生一个异常,异常时python对象,表示
# 一个错误,当python脚本呢发生异常时我们需要捕获处理它,或者程序会终止执行。
#    在python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有
# 异常都从基类Exception继承,而且都是exceptions模块中定义。Python 自动将所有异常放
# 在内建命名空间中,所以程序不必导入exception模块即可使用异常。
#     捕获异常可以使用try/except语句
#     try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息处理。如果
# 你不想在异常发生时结束你的程序,只需要在try捕获它。

# python 异常处理基本实现
# 语法:
'''
try:
    block
except [exception,[data....]]:
    block
else:
    block

# 异常处理:处理软件或信息系统中出现的异常情况
# 语法 try -- except -- else -- finally
list_a = ['a','b','c','d']
try:  # try 下面方可能出错的代码
    num = int(input('输入0-3之间的下标:'))
    print(list_a[num])
# 对错误进行错误,让程序能够继续往后执行
except IndexError as e:
    print('下标越界,错误信息是:',e)
    print('系统默认输出list_a[0]的值',list_a[0])
except ValueError as  e:
    print('输入类型错误,错误信息是:',e)
    print('系统默认输出list_a的值', list_a)
except Exception as e:  #Exception 只能放在最后面
    print('未知错误!')
else:
    print('我是else:当try忠告没有错误的时候才会执行')
finally:
    print('我是finally,无论怎样都执行')
print('看看看是否执行')
'''

# 该种异常处理语法的规则是:
# 执行try 下的语句,如果引发异常,则执行过程会跳到第一个except语句。
# 如果第一个except种定义的异常引发的异常匹配,则执行该except种的语句。
# 如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except 数量没有限制。
# 如果所有的except都不匹配,则异常会传递到下一个调用本体代码的最高层try代码中。
# 如果没有发生异常,则执行else块代码。
# 举例:
'''
try:
    f = open('C:\Users\kcadmin\Desktop\timesheet_aboutcg.txt','r')
except IOError as e:
    print(e)
'''
# 解释:捕获到的IOError错误的详细原因会被放置在对象e中,然后运行该异常的except代码块
# 捕获所有的异常

#    使用except 子句需要注意的事情,就是多个except子句截获异常时,如果各个异常类
# 之间具有继承关系,则子类应该卸载前面,否则父类将会直接截获子类异常。放在后面的子类
#  也就不会执行到了。
# try - finally 语句:
#         无论是否发生异常都将执行最后的代码
'''
try:
    block
finally:
    block  # 退出try时总会执行
'''
# 注意;else语句也不能与finally语句同时使用。举例:
'''
try:
    f = open('C:\Users\kcadmin\Desktop\timesheet_aboutcg.txt','r')
    try:
        f.write('This is my test file for exception handing!!')
    finally:
        print('Going to close the file')
except IOError:
    print("Error:can't find file or read data")
'''


                                   # 触发异常:
#     python 中的raise 关键字用于引发一个异常,语法格式如下:
#                    raise[Exception[,args[,traceback]]]
#     语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的
# 如果不提供,异常的casual就是"None"
# 举例:
'''
def ThrowErr():
    raise Exception("抛出一个异常")
    print("hello")  # 爬出异常后语句不执行


try:
    ThrowErr()
except Exception as x:
    print(x)
'''

# 备注:当行数中的异常触发后,退出该函数,print语句将不执行
# 一个异常可以带上参数,可作为输出的异常信息参数,如 x,x 接收raise 抛出的错误信息。
# 变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。元组
# 通常包含错误字符串,错误数字,错误位置。

# python 自定义异常
#    通过创建一个新的异常类,程序可以命名他们自己的异常。异常应该是典型的继承自Exception
# 类,通过直接或间接的方式。自定义异常使用raise语句引发,而且只能通过人工方式触发。
# 举例:
'''
class DivisionException(Exception):
    def __init__(self, x, y):  # 调用基类的_ _init__进行初始化
        Exception.__init__(self, x, y)
        self.x = x
        self.y = y


if __name__ == '__main__':
    try:
        x = 3
        y = 2
        if x % y > 0:  # 如果大于0 ,则不能被初始化,抛出异常
            print(x / y)
            raise DivisionException(x, y)
    except DivisionException as div:         # div 表示DivisionException的实例对象
        print("DivisionException:x/y = %.2f" % (div.x / div.y))

# 触发异常:由raise语句引起,只能由raise就会报错
# 异常分类:
# 1.系统异常:下标越界、类型错误、路径错误...
# 2.业务异常:充值金额只能在某个区间、密码错误、年龄范围
# raise 触发异常
try:
    raise IndexError("我是下标越界异常")  # 拆功能键一个IndexError异常,然后由raise触发
except IndexError as e:
    print(e)

# 从键盘输入一个年龄,允许输入的范围在1-120之间
# 编写一个异常类
class input_1_120_Error(Exception):
    def __str__(self):
        return '输入的值不在1-120之间'
try:
    age = int(input('请输入正确的年龄:'))
    if  age<1 or age > 120:
        raise input_1_120_Error
    else:
        print('你输入的年龄为:',age)
except input_1_120_Error as e:
    print('输入范围错误,错误信息是:',e)
    print('系统设置默认年龄为:',age)
    age = 20
except Exception as e:
    print(e)
'''
                                # python 标准异常列表
# BaseException             所有异常的基类
# SystemExit                 解释器请求退出
# KeyboardInterrupt              用户中断执行(通常是输入^C)
# Exception                    常规错误的基类
# StopIteration              迭代器没有更多的值
# GeneratorExit              生成器(generator)发生异常来通知退出
# SystemExitPython               解释器请求退出
# StandardError                 所有的内建标准异常的基类
# ArithmeticError                 所有数值计算错误的基类
# FloatingPointError               浮点计算错误
# OverflowError                    数值运算超出最大限制
# ZeroDivisionError           除(或取模)零(所有数据类型)
# AssertionError                   断言语句失败
# AttributeError                 对象没有这个属性
# EOFError                  没有内建输入,到达EOF 标记
# EnvironmentError            操作系统错误的基类
# TypeError                       对类型无效的操作
# ValueError                 传入无效的参数
# UnicodeErrorUnicode               相关的错误
# UnicodeDecodeErrorUnicode           解码时的错误
# UnicodeEncodeErrorUnicode              编码时错误
# UnicodeTranslateErrorUnicode          转换时错误Warning警告的基类
# DeprecationWarning               关于被弃用的特征的警告
# FutureWarning                       关于构造将来语义会有改变的警告
# OverflowWarning                  旧的关于自动提升为长整型(long)的警告
# PendingDeprecationWarning         关于特性将会被废弃的警告
# RuntimeWarning              可疑的运行时行为(runtime behavior)的警告
# SyntaxWarning                    可疑的语法的警告
# UserWarning                用户代码生成的警告
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章