python异常

简介: 程序代码为什么会报错?因为不符合语法,因为python的作者在代码中使用了if判断,如果除数为0,就会在代码中抛出异常错误,抛出异常raise异常对象#当程序代码遇到raise的时候,程序就报错了异常对象=异常类(参数)自定义异常类,继承Exception或者BaseException选择书写,定义init__方法,定义__str方法在合适的时机抛出异常对象即可httpshttpshttpshttpshttpshttpshttpshttps。............

@[toc]

1.异常的概念

异常: 程序运行过程中,代码遇到错误,给出错误的提示,比如下面的这两个错误ValueError,ZeroDivisionError

print('其他的代码......')
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
a = int(num)
ans = 10 / a
print('计算得到的结果是:', ans)
print('其他的代码......')

ValueError,ZeroDivisionError这两个报错样例代码
在这里插入图片描述
在这里插入图片描述

ValueError,ZeroDivisionError这两个报错的信息

2.捕获单个异常

异常: 程序代码在运行过程中遇到的错误, 程序会报错,会终止程序代码的运行.
异常捕获: 是指在程序代码运行过程中,遇到错误, 不让程序代码终止,让其继续运行, 同时可以给使用者一个提示信息并记录这个错误, 便于后期改进

try:
    可能发生异常的代码
except 异常的类型:
    发生异常执行的代码
print('其他的代码......')
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
    a = int(num)
    ans = 10 / a
    print('计算得到的结果是:', ans)
except ZeroDivisionError:
    print('你输入有误,请再次输入')

print('其他的代码......')

示例代码
在这里插入图片描述
输入0的时候没有出现报红,而是显示的我定义的东西

3.捕获多个异常

3.1第一种方法

try:
    可能发生异常的代码
except (异常的类型1, 异常类型2, ...):
    发生异常执行的代码
print('其他的代码......')
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
    a = int(num)
    ans = 10 / a
    print('计算得到的结果是:', ans)
except (ZeroDivisionError, ValueError):
    print('你输入有误,请再次输入')

print('其他的代码......')

示例代码

在这里插入图片描述
在这里插入图片描述

3.2第二种方法

try:
    可能发生异常的代码
except 异常类型1:
    发生异常1,执行的代码
except 异常类型2:
    发生异常2,执行的代码
except ...:
    pass
print('其他的代码......')
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
    a = int(num)
    ans = 10 / a
    print('计算得到的结果是:', ans)
except ZeroDivisionError:
    print('你输入有误,请再次输入')
except ValueError:
    print('输入有误,请输入数字')

print('其他的代码......')

示例代码

在这里插入图片描述
在这里插入图片描述

4.打印异常信息

try:
    可能发生异常的代码
except (异常的类型1, 异常类型2, ...) as 变量名:
    发生异常执行的代码
    print(变量名)
print('其他的代码......')
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
    a = int(num)
    ans = 10 / a
    print('计算得到的结果是:', ans)
except (ZeroDivisionError, ValueError) as e:
    print('你输入有误,请再次输入', e)

print('其他的代码......')

示例代码

在这里插入图片描述
在这里插入图片描述

5.捕获所有的异常

Exception或者BaseException都可以

try:
    可能发生异常的代码
except:   # 缺点, 不能获取异常的描述信息
    发生异常执行的代码
    
    
==============
try:
    可能发生异常的代码
except Exception as e:
    发生异常执行的代码
    print(e)
    pass

# Exception 是常见异常类的父类,
ZeroDivisionError --> ArithmeticError --> Exception --> BaseException  ---> object
ValueError --> Exception --> BaseException  ---> object
print('其他的代码......')
num = input('请输入一个数字:')
try:
    a = int(num)
    ans = 10 / a
    print('计算得到的结果是:', ans)
    f = open('1.txt', 'r')
except Exception as e:
    print('你输入有误,请再次输入', e)

print('其他的代码......')

在这里插入图片描述

6.异常的完整结构

try:
    可能发生异常的代码
except Exception as e:
    发生异常执行的代码
    print(e)
else:
    代码没有发生异常,会执行
finally:
    不管有没有发生异常,都会执行
print('其他的代码......')
num = input('请输入一个数字:')
try:
    a = int(num)
    ans = 10 / a
    print('计算得到的结果是:', ans)
except Exception as e:
    print('你输入有误,请再次输入', e)
else:
    print('没有发生异常,我会会执行')
finally:
    print('不管有没有发生异常,我都会执行')

print('其他的代码......')

7.异常的传递

是 python 异常处理的底层机制,是原理层面上的,不需要我们自己写代码实现,是 python 已经实现好的.

异常传递: 当一行代码发生异常之后,会向外层将这个异常进行传递,指导被捕获或者程序报错为止.

  1. try 嵌套
  2. 函数嵌套
print('其他的功能代码.....')
num = input('请输入数字:')
try:
    try:
        a = int(num)  # ValueError
    except ZeroDivisionError:
        print('发生异常')
    finally:
        print('我都执行了....')

    num = 10 / a
    print(f'计算的结果<<{num}>>')
except Exception as e:
    print(e)


print('其他的功能代码.....')
def func1():
    print('-------1---------')
    num = input('请输入数字')  # 0
    num = 10 / int(num)  # 假设0 是计算的出来的
    print(num)
    print('-------2---------')


def func2():
    print('-------3---------')
    func1()
    print('-------4---------')


try:
    print('-------5---------')
    func2()
    print('-------6---------')
except Exception as e:
    print('-------7---------')
    print(e)

# 5 3 1 7

8.抛出自定义异常

程序代码为什么会报错?因为不符合语法, 因为 python 的作者在代码中使用了 if 判断,如果除数为 0 ,就会在代码中抛出异常错误,

抛出异常:
    raise 异常对象  # 当程序代码遇到 raise 的时候,程序就报错了
    
异常对象 = 异常类(参数)  

抛出自定义异常:

  1. 自定义异常类,继承 Exception 或者 BaseException
  2. 选择书写,定义 init__方法,定义__str 方法
  3. 在合适的时机抛出异常对象即可
# 1. 定义异常类, 密码长度不足的异常
class PasswordLengthError(Exception):
    # def __str__(self):
    #     return 'xxxxxx'
    pass


def get_password():  # 等同于系统定义函数
    password = input('请输入密码:')
    if len(password) >= 8:
        print('密码长度合格')
    else:
        # 抛出异常
        raise PasswordLengthError('密码长度不足8位')
        # print('密码长度不足8位')

try:
    get_password()  # 调用系统的函数
except PasswordLengthError as e:
    print(e)

print('其他代码.....')

在这里插入图片描述

目录
相关文章
|
2月前
|
存储 索引 Python
|
6月前
|
Python
Python基础教程(第3版)中文版 第8章 异常(笔记)
Python基础教程(第3版)中文版 第8章 异常(笔记)
|
2月前
|
Python
Python生成器、装饰器、异常
【10月更文挑战第15天】
|
5月前
|
Unix API Python
【Python】已完美解决:(Python3.8异常)AttributeError: module ‘time‘ has no attribute ‘clock‘
【Python】已完美解决:(Python3.8异常)AttributeError: module ‘time‘ has no attribute ‘clock‘
107 0
|
2月前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
26 1
|
3月前
|
人工智能 数据可视化 搜索推荐
Python异常模块与包
Python异常模块与包
|
2月前
|
开发者 索引 Python
Python常见的异常总结
Python 中的异常是一个非常广泛的主题,因为它包含许多内置的异常类型,这些类型可以处理各种运行时错误。
29 0
|
5月前
|
数据采集 存储 Java
如何让Python爬虫在遇到异常时继续运行
构建健壮Python爬虫涉及异常处理、代理IP和多线程。通过try/except捕获异常,保证程序在遇到问题时能继续运行。使用代理IP(如亿牛云)防止被目标网站封锁,多线程提升抓取效率。示例代码展示了如何配置代理,设置User-Agent,以及使用SQLite存储数据。通过`fetch_url`函数和`ThreadPoolExecutor`实现抓取与重试机制。
如何让Python爬虫在遇到异常时继续运行
|
5月前
|
机器学习/深度学习 运维 监控
使用Python实现深度学习模型:智能安防监控与异常检测
【7月更文挑战第26天】 使用Python实现深度学习模型:智能安防监控与异常检测
69 6
|
4月前
|
API C++ Python
【Azure 应用服务】Python fastapi Function在Azure中遇见AttributeError异常(AttributeError: 'AsgiMiddleware' object has no attribute 'handle_async')
【Azure 应用服务】Python fastapi Function在Azure中遇见AttributeError异常(AttributeError: 'AsgiMiddleware' object has no attribute 'handle_async')