Python 核心技术与实战
景霄
Facebook 资深工程师
114324 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
Python 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

32 | 答疑(三):如何选择合适的异常处理方式?

系统部分修改说明
系统性能
组成部分介绍
系统概述
项目的文档重要性
修改对应的注释
在tricky的代码上方加注释
类、函数、功能块开头加描述性注释
没有统一要求,根据代码量和复杂度决定
避免bug增多和代码难以维护
同时进行
功能和规范应同时进行
具体场景决定使用哪种方法
程序终止 vs. 程序捕获并继续运行
异常处理代码中进行处理
代码中对数据进行检测并直接处理与抛出异常
项目文档内容
代码规范不足的情况
修改代码后的注意事项
注释规范
注释的合适数量
后期优化的重要性
代码质量和规范完整的优先级
错误认知
选择异常处理方式的依据
第二种异常处理方式
第一种异常处理方式
项目的API文档重要性
代码中写多少注释才合适?
先写出能跑起来的代码,后期再优化可以吗?
答疑(三):如何选择合适的异常处理方式?

该思维导图由 AI 生成,仅供参考

你好,我是景霄。
不知不觉中,我们又一起完成了第三大章规范篇的学习。我非常高兴看到很多同学一直在坚持积极地学习,并且留下了很多高质量的留言,值得我们互相思考交流。也有一些同学反复推敲,指出了文章中一些表达不严谨或是不当的地方,我也表示十分感谢。
大部分留言,我都在相对应的文章中回复过了。而一些手机上不方便回复,或是很有价值很典型的问题,我专门摘录了出来,作为今天的答疑内容,集中回复。

问题一:应该使用哪种异常处理方式?

第一个问题是 code2 同学的疑惑。下面这两种处理的风格,哪一种风格更有效、更优雅?
第一种,在代码中对数据进行检测,并直接处理与抛出异常。
第二种,在异常处理代码中进行处理。
其实,第一种方法,可以翻译成下面的“if…elif…”语句:
if [condition1]:
raise Exception1('exception 1')
elif [condition2]:
raise Exception2('exception 2')
...
而第二种方法,则对应着下面异常处理的代码:
try:
...
except Exception as e:
...
这两种方法很大的一个区别是,第一种方法一旦抛出异常,那么程序就会终止;而在第二种方法中,如果抛出异常,会被程序捕获(catch),程序还会继续运行。这也是我们选择这两种方法的重要依据。当然,在实际工作中,到底使用哪一种方法,还是取决于具体的场景。
比方说,一个模块的功能是对输入进行检测,如果输入不合法,则弹出对话框进行提示,并终止程序。那么,这种情况下,使用第一种方法更加合理。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文主要围绕异常处理方式、代码优化和注释、项目API文档等技术问题展开讨论。作者首先解答了读者提出的关于异常处理方式选择的问题,指出了两种不同方式的优缺点及适用场景。其次,作者强调了在编写代码时应同时注重功能完整和规范完整,避免后期出现大量bug和难以维护的情况。此外,作者还讨论了代码中注释的适量使用以及项目API文档的重要性。通过具体案例和经验分享,读者可以获得关于技术规范和最佳实践的宝贵建议。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • Geek_d848f7
    老师,结合我们这段时间的学习,有没有短小精悍的项目推荐,想学习别人怎么组织代码

    作者回复: 这个你去github上找些popular的项目就可以啦

    2019-07-22
    16
  • enjoylearning
    有没有web api的好工具推荐呢,虽然在用swagger,但感觉集成到项目侵入性太强,不优雅

    作者回复: 测试的话postman就可以了。具体工程中python一般用dijando或者flask的框架

    2019-07-22
    5
    14
  • 老师,对于异常捕获选择异常条件有什么技巧吗?不太会去选择。对于服务端,我的异常打印到日志文件中,是全部异常都打印,还是筛选出具体异常的位置进行打印?

    作者回复: 这个看具体需求,一般来说都会打印的,但是会downsample,比如每1000次打印一次,减小服务器压力

    2019-07-22
    2
    8
  • Michael
    项目中结合:isort, flake8(pylint), black(yapf), pytest, mypy 这些工具,写出来的代码在质量上肯定有不少的提升
    2019-07-24
    9
  • 姜饼人
    老师,能不能介绍一下你在FB的时候,关于jupyter notebook的一些规范和风格,和最佳实践
    2019-08-02
    1
    8
  • 小侠龙旋风
    谢谢老师的问答,请问,有没有写得比较好的API案例推荐。
    2019-07-22
    2
  • Geek_6e549c
    游戏开发更迭快 从来没有文档
    2020-09-27
    1
  • Geek_aa780e
    在web项目中,异常在哪层进行捕获比较好呢? 比如说handler->service ->model, 日志在哪里打印比较好 ?
    2020-08-05
    1
  • 旗木卡卡
    问题二、产品设计的时候就应该同时考虑到功能规划和代码结构,设计的合理,代码结构自然也会好很多。
    2019-07-27
    1
  • code2
    在C++中,构造函数中出现异常由编译器来处理,不需要程序员参与,在python重视如何处理的?由解释器处理吗?
    2019-07-23
    1
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部