VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • 16异常处理

异常处理#

异常#

  • 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
  • 一般情况下,在Python无法正常处理程序时就会发生一个异常。
  • 异常是Python对象,表示一个错误。
  • 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

捕获异常#

异常类型捕获#

# 捕获常规异常

try:

    可能发生错误的代码

except:

    如果出行异常执行的代码



# 捕获指定异常

try:

    可能发生错误的代码

except NameError as e:  # e = 当前异常对象 

    如果出行异常执行的代码

    

# 捕获多个异常

try:

    可能发生错误的代码

except(NameError, ZeroDisvisionError):

    如果出行异常执行的代码

    

# 捕获全部异常(捕获常规异常也可以)

try:

    可能发生错误的代码

except Exception as e:  # e = 当前异常对象 

    如果出行异常执行的代码

常见异常类型#

异常名称 描述
AttributeError 对象没有这个属性
OSError 操作系统错误
ImportError 导入模块/对象失败
IndexError 序列中没有此索引(index)
KeyError 没有这个键
NameError 未声明/初始化对象 (没有属性)
SyntaxError Python 语法错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
Warning 警告的基类

try-except-else#

  • 如果抛出异常执行except内部代码
  • 如果程序正常执行else内部代码
# else异常

try:

    print(1)

except Exception as e:

    print(e)

else:

    print("我是else,是没有异常的时候执行的代码")

try-except-finally#

不管程序有无发生异常,都将执行finally内部代码。

# 异常的Finally(无论是否有异常,都要执行的代码)

try:

    f = open("test.txt",'r')

except Exception as e:

    f = open("test.txt",'w')

else:

    print("未出现异常")

finally:

    f.close()

注意:else和Finally可写可不写

主动触发异常#

  • 在实际开发中,在程序不满足某条件时,通常会主动抛出异常。
  • 语法:raise Exception()
# 判断煎饼熟了没,当烹饪时间小于5时,则主动触发没熟异常;否则熟了。

def test(level):

    if level<5:

        raise Exception("没熟没熟")



try:

    test(4)

except Exception as e:

    print(e)

else:

    print("熟了 请吃") 

自定义异常#

  • 当需要自定义满足一些规则时,就可以自定义异常。
  • 自定义异常通过创建一个新的异常类,自定义名字与内容,并且需要继承Exception类实现。
# 判断密码长度  如果密码长度小于6 主动触发异常 并抛出异常信息(打印提示)

class ShortInputError(Exception):

    # 初始化方法

    def __init__(self, lenght, min_lenght):

        self.lenght = lenght

        self.min_lenght = min_lenght



    def __str__(self):

        return f"你输入的密码长度为{self.lenght},不能低于{self.min_lenght}"



def fun():

    try:

        password = input("请输入你的密码:")

        if len(password) < 6:

            raise ShortInputError(len(password), 6)  # 主动触发异常  并返回提示信息

    except Exception as e:

        print(e)

    else:

        print("密码已正确输入!")



fun()

断言#

  • assert断言用于判断一个表达式,当表达式条件为False时触发断言异常AssertionError。
  • 注意:断言用于强制用户服从,可捕获,但是一般不捕获。
  • 语法:assert 表达式,返回数据
print("*" * 20)

if  2 == 2:

    raise AssertionError

print("*" * 20)

"""

print("*" * 20)该语句并不会执行,条件满足,触发了断言,后面的语句都不会再执行

"""



print("*" * 20)

if  2 == 2:

    # 捕获断言

    try:

        raise AssertionError

    except Exception as e:

        # 类的对象实例调用__class__属性时会指向该实例对应的类,而后再调用 __name__ 就会输出该实例对应的类的类名

        print(e.__class__.__name__)

print("*" * 20)
try:

    n = input("请输入一个数字:")

    assert n.isdigit(), "只能输入数字"  # assert 表达式,返回数据

    print("你输入的是:", n)

except Exception as ex:

    print("发现错误:", ex)

    

"""

请输入一个数字:s

发现错误: 只能输入数字

"""


相关教程