Python异常处理 - vip共享吧
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们


导航菜单
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们
Python

Python异常处理

2024/9/6 韩俊  Python教程 445 0

在程序运行的过程中,有可能出现各种错误,我们就需要对这种错误做处理,比如我们写一个除法运算的函数, 当用户给的除数为 0 的时候,我们就要做这种错误处理。

对程序进行错误处理的一种方式是我们可以事先约定返回一个错误代码,这样,就可以知道是否有错, 以及出错的原因,比如当用户给的除数为 0 的时候,我们给用户返回一个值告诉用户除数不能为 0, 但是应该返回什么值比较好呢,假如我们返回 -1 来告诉用户除数不能为 0,但是对正常的运算也有可能出现 -1 的情况,比如 5 / -5。当然我们可以返回一个正常运算无法得到的值,比如返回一个字符串 "error"。

我们也可以采用一种比较简单,粗暴,直接的方式来处理除数为 0 的情况,当用户给的除数为 0 的时候,我们直接给用户抛出一个异常, 让程序停止运行。

错误处理的两种方式

在 Python 内置的众多函数中,对错误处理的方式,有的是是采用返回值的方式,有的是采用抛出异常的方式。 我们先来看两个常用的函数,比如字符串内置的 find 函数,当给出的子串不存时,错误处理是返回 -1;Python 内置的 divmod 函数,当给出的除数为 0 的时候,错误处理是抛出异常。

mystr = "hello"
index = mystr.find("nihao")  # 返回 -1
data = divmod(250, 0)        # 抛出异常

当然我们自己写函数,也可以采用通过返回值的方式,做错误处理。

def division(ldata, rdata):
        if rdata == 0:
            return "error"
        else:
            return ldata / rdata

data = division(250, 0)

我们也可以通过抛出异常的方式,做错误处理。

def division(ldata, rdata):
    if rdata == 0:
        raise ValueError("除数不能为 0")
    else:
        return ldata / rdata

data = division(250, 0)

try、except和finally

对于返回值处理错误的方式我们可以根据返回值做业务逻辑处理,本节课我们不在赘述, 本节课我们重点学习当抛出异常后,我们怎么继续处理这些异常,首先我们来学习 try...except 语句。

def division(ldata, rdata):
    if rdata == 0:
        raise ValueError("除数不能为 0")
    else:
        return ldata / rdata

try:
    data = division(250, 0)  # division 函数抛出异常
except:
    print("除数不能为0")     # 我们继续写代码处理掉异常

当然有时候,我们的语句发生的错误有好几种原因,当然 except 可以根据错误原因进行针对性捕获。

def division(ldata, rdata):
    if not isinstance(ldata, (int, float)) or not isinstance(rdata, (int, float)):
        raise TypeError("类型错误")

    if rdata == 0:
        raise ValueError("除数不能为 0")
    else:
        return ldata / rdata

try:
    data = division("hello", 4)  # 大家可以尝试给被除数和除数输入非数字类型或者除数为 0 做测试。
except ValueError:
    print("除数不能为 0")
except TypeError:
    print("请输入数字类型数据")

当然对于针对性的捕获异常,如果异常没有捕获到,异常则会传递。

def division(ldata, rdata):
    if not isinstance(ldata, (int, float)) or not isinstance(rdata, (int, float)):
        raise TypeError("类型错误")

    if rdata == 0:
        raise ValueError("除数不能为 0")
    else:
        return ldata / rdata

try:
    data = division("hello", 4)  # 抛出的是 TypeError
except ValueError:               # 捕获的是 ValueError
    print("除数不能为 0")

有很多函数引发的异常行为很多,但是我们只想处理我们想处理的异常行为,对于不想处理的异常,我们可以放在 except 里面统一处理。

def division(ldata, rdata):
    if not isinstance(ldata, (int, float)) or not isinstance(rdata, (int, float)):
        raise TypeError("类型错误")

    if rdata == 0:
        raise ValueError("除数不能为 0")
    else:
        return ldata / rdata

try:
    data = division("hello", 4)  # 抛出的是 TypeError
except ValueError:               # 捕获的是 ValueError
    print("除数不能为 0")
except:                          # 捕获除 ValueError 之外的所有异常
    print("其它异常")

try...except 语句还支持 finally,finally 的意思是无论有没有异常,最终都要进入该语句块执行代码, 注意 finally 不做异常处理,且只能放在 except 语句后面。

def division(ldata, rdata):
    if not isinstance(ldata, (int, float)) or not isinstance(rdata, (int, float)):
        raise TypeError("类型错误")

    if rdata == 0:
        raise ValueError("除数不能为 0")
    else:
        return ldata / rdata

try:
    data = division("hello", 4)
except TypeError:
    print("请输入数字类型数据")
finally:  # 没有异常或已经处理掉异常也会进入该语句
    print("over")

try:
    data = division("hello", 4)
except ValueError:
    print("请输入数字类型数据")
finally:  #  finally 不做异常处理,会继续抛出异常
    print("over")

本节重要知识点

会自己处理程序错误,返回错误码或者抛出异常方式。

熟练使用 try...except...finally 语句。

点赞:0 分享

上一篇
搜索引擎喜欢什么样的url?
下一篇
Python序列化和反序列化
作者头像 作者名称 作者性别
韩俊

热门推荐

1 python中time模块详解
2 python3闭包函数
3 Python中itertools模块如何使用
4 Python3高级运算符
5 Python中hashlib模块详解
6 Python中urllib模块详解

评论列表

取消回复

    •  
      Login

      韩俊

      趁你现在还有时间,尽你自己最大的努力,努力做成你最想做的那件事,成为你最想成为的那种人,过着你最想过的那种生活。这个世界永远比你想的要更精彩,不要败给生活。

      退出登陆
      • 10076文章
      • 455评论
      • 80微语
  • 广告赞助

  • 二零二五年06月
    一二三四五六日
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
  • 分类

    • 网站模板源码
    • IT技术笔记
    • 好资源分享
    • 共享网络资源
  • 最新文章

      • 幼儿端午祝福语简短句
        • 端午简短祝福语送家人
          • 端午文案祝福语简短励志
            • 经典的黄句子
              • 经典黄色搞笑句子
                • 迷雾通:免费使用的VPN软件
                  • 任推邦:打造你的赚钱新途径!
                    • 任推邦是正规平台吗?任推邦邀请码多少?
  • 热门文章

    • 酷狗音乐VIP账号 酷狗音乐会员账号共享2017.01.29更新
    • 芒果tv vip会员账号 芒果tv会员账号共享2017.01.29更新
    • 爱奇艺vip账号 爱奇艺/PPS会员账号共享2016.12.12更新
    • 优酷/土豆vip会员账号 优酷会员账号共享2017.01.29更新
    • 活动:免费获得爱奇艺VIP/PPS会员账号50天以上的使用权!
    • 酷我音乐VIP账号 酷我音乐会员账号共享2016.12.31更新
    • 暴风影音会员账号 暴风影音会员账号共享2016.12.31更新
    • m1905会员账号 m1905会员账号共享2016.10.21更新
  • 最新评论

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/10.jpg

      你丫的 文章写得太好了 支持下!![F3...

    • https://www.vipshare8.com/content/templates/meta/Static/images/avatar.jpg

      很棒!刚在某网站看到这个,很欣赏,可惜下...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3861064027

      呃呃呃 oooo

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了111:根据激活的时间有一年的有效期!

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=792480561

      到2025就到期了吗?

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      [blockquote]打卡时间:16:...

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/7.jpg

      俊哥,想借用迅雷一用!但需要手机验证!看...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3293901900

      感谢大大的分享

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了好奥v:如果没有解析成功,可以切换接口...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=131241242441

      现在视频解析网站怎么用不了啦?

  • 网站统计 I 当前在线:537人

    • 本站管理:1位
    • 用户总数:591位
    • 置顶文章:2篇
    • 日志总数:10076篇
    • 微语总数:80条
    • 评论总数:455条
    • 标签总数:83条
    • 页面总数:8页
    • 分类总数:14个
    • 链接总数:16条
    • 运行天数:3699天
    • 最后更新:5月26日
    • 登录
    • 注册
    • 找回
    Copyright © 2025vip共享吧网站地图 网站备案豫ICP备19004194号-1

    免责声明:本站资源仅供用于学习和交流,本站部分素材内容来源于网络,如有侵权/投稿等,请及时联系站长.

    • 首页
    • 秒懂百科 秒懂百科
    • 搜索
    • 史上今日

    大家都在搜

    • 聊天app
    • javascript教程
    • 爱奇艺VIP账号共享
    • qq音乐vip账号共享
    • 酷狗会员账号共享
    • pptv会员
    • 搜狐视频会员账号
    • 经典句子
    • 爱奇艺vip账号
    • 咪咕会员账号
    • 开发工具
    • 最新电影
    • 掌阅会员账号
    • 飞卢小说vip账号共享
    • 搜狐视频vip账号
    • 百度文库下载
    • 
    • 