python基础(八)----异常

2021/4/11 20:29:43

本文主要是介绍python基础(八)----异常,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、异常种类

#异常:Python解释器在执行程序时,如果遇到一个错误,就称为一个异常
#抛出异常: 程序执行中止报错,称为抛出异常

#捕获异常:某些代码不能确认是否正常执行,可以来捕获异常

异常的种类:
Exception           所有异常的基类,包含所有错误类型
AttributeError      对象没有这个属性
IOError             输入/输出异常;基本上是无法打开文件
ImportError         无法引入模块或包;基本上是路径问题或名称错误
IndentationError    语法错误(的子类);缩进错误,代码没有正确对齐
IndexError          下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError            试图访问字典里不存在的键
KeyboardInterrupt   Ctrl+C被按下
NameError           使用一个还未被赋予对象的变量
SyntaxError         Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError           对类型无效的操作
UnboundLocalError   试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError          传入一个调用者不期望的值,即使值的类型是正确的
NotImplementedError 尚未实现的方法
StopIteration 迭代器没有更多的值
"""

二、异常捕获结构

"""
1.简单异常捕获
     try:
          尝试执行的可能存在异常的代码
     except:
          异常处理,如果发生异常,执行except的代码,except可以有0个或多个,如果有多个
"""
"比如在计算除法中出现为 0 的情况出现异常 "
try:
    1/0
except ZeroDivisionError as e:
    print(e.args)

"""
2.根据错误类型捕获异常
    try:
        尝试执行可能存在异常的代码
    except 已知异常1:
        异常处理

    except(已知异常2,已知异常3):
        异常处理
"""

"""
3.python内置模块.捕获未知错误
开发时没有提前预知的错误被称为未知错误
如果开发过程中,不论出现任何异常而导致程序终止,则可以使用捕获未知错误
语法:
    try:
        尝试执行可能存在异常的代码
    except Exception as result:  #Exception是python的异常类,包含所有的错误类型;result表示错误类型,使用print可以输出错误信息
        print("出现的异常是%s" %result)
"""

"""
4.异常捕获的完整语法:
    try:
       尝试可能有异常的代码段
    except 已知异常1:
       异常处理
    except (已知异常2,已知异常3):
       异常处理
    except Exception as result:    #捕获未知异常
       print("未知异常%s" %result)
    else:
       无异常时执行的代码段
    finally:
       无论是否有异常都会执行的代码段
"""

"""
6.主动抛出异常
除了程序中本来需要捕获的异常外,还可以根据应用需求主动抛出异常
python提供了 Exception 异常类,如果想主动抛出异常:
    1.创建一个Exception类的异常对象:EX= Exception()
    2.使用raise 抛出异常对象:      raise Ex
"""
"主动抛出异常的例子"
def input_passworld():
    userpwd= int(input("请输入一个密码:"))
    if len(userpwd>=8 ):  #如果密码大于等于8,返回密码
        return userpwd
    # 如果小于8,则抛出异常
    EX= Exception("密码长度不够!!!")  # 1.创建异常对象
    raise EX   # 2.抛出异常对象

try:
    print(input_passworld())  # 在调用函数方捕获抛出的异常
except Exception as result:
    print("异常信息%s" %result)

"""
7.异常的传递
异常向上传递,会一级一级传递到调用函数,直到主程序
* * * 在主程序中设置异常捕获机制,可以防止程序出错终止
"""
def demo1():
    func1=  input( input("请输入正确的整数"))
    print("func1")
def demo2():
    demo1()

# 主程序:
try:
    print(demo2())  #在主程序中设置异常捕获机制,可以防止程序出错终止
except Exception as result:
    print("捕获到的异常为%s" %result)

三、自定义异常

1. 定义一个异常类,继承Exception基类
2. 使用raise抛出异常类
"""
class MyException(Exception):  #定义一个异常,继承 Exception异常基类
    def __init__(self, msg):
        self.message = msg
    def __str__(self):
        return self.message

try:
    raise MyException('我的异常')  #使用 raise 主动触发异常
except MyException as e:
    print('异常信息:', e)

 

四、断言

什么是断言?
在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时 就崩溃,这时候就需要 assert 断言的帮助
python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。
可以理解 assert 断言语句为 raise-if-not,用来测试表示式,其返回值为假,就会触发异常。
断言条件为真时,代码继续执行,负责抛出异常,这个异常通常不会去捕获他,我们设置一个断言目的就
是要求必须实现某个条件。assert True

格式: assert 表达式   #表达式为真,断言成功,不输出任何消息,程序继续执行;表达式为假,断言失败,程序报错终止

断言的应用场景:
   1.断言能够帮助别人或未来的你理解代码,找出程序中逻辑不对的地方,
   2.一方面,断言会醒你某个对象应该处于何种状态,
   3.python内置模块.另一方面,如果某个时候断言为假,会抛出 AssertionError 异常,很有可能终止程序。
   4.来测试表示式,其返回值为假,就会触发异常
"""
assert 1 == 1    #表达式为真,不输出信息
print('---------------')
#assert 1 == 2    #表达式为假,抛出异常
"""Traceback (most recent call last):
#  File "Z:/python_project/day18/ddd/yichang.py", line 26, in <module>
#    assert 1 == 2
#AssertionError"""

def foo(a):
   assert a==2,Exception("不等于 2")
   print("ok",a)
if __name__ == '__main__':
    foo(2)  #ok 2
    foo(1)  #AssertionError: 不等于 2





这篇关于python基础(八)----异常的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程