当前位置: 首页 > news >正文

【python经验总结】我与bug的那些日子

【python经验总结】我与bug的那段岁月

💖💖💖💕💕💕欢迎来到本博客💕💕💕💖💖💖
.
🎁支持:如果觉得博主的文章写得还说得过去或者博客对您有帮助的话,可以关注一下博主,如果三连收藏支持就更好啦!这就是给予我最大的支持!

🎉🎉Welcome to my blog!🎉🎉

📃个人CSDN博客主页:热爱科技的刘同学🌈🌈🌈

我学习编程六年,其中python就得占用我四、五年的时间。在这四五年里,bug这一词光是听,我的耳朵也该起茧子了。虽然bug没有给我带来过什么“灭顶之灾”,但这仍然无法改变我对bug的看法。

对付bug的有效方法不是一味地避其锋芒,而是直面它或是将它扼杀在祸根之中。

在这里插入图片描述

举个例子。当我们身后有一堵墙、面前有无尽的黑暗时,我们不会像鸵鸟一样一头扎在墙根,我们会背靠着墙,直面未知与黑暗!

读完以下内容,相信你一定能将bug扼杀在祸根之中!

文章目录

  • 【python经验总结】我与bug的那段岁月
  • 一、常见类型
    • (一)粗心导致语法错误
    • (二)知识点不熟练
    • (三)思路不清晰
    • (四)被动掉坑
      • 1、基础形式
      • 2、拓展模式
        • try-except-else
        • try-except-else-finally
  • 二、常见异常类型
  • 三、Traceback模块的使用

一、常见类型

(一)粗心导致语法错误

例如:

  1. 漏了末尾冒号;
  2. 缩进错误;
  3. 英文符号错用为中文符号;
  4. 字符串拼接时,把字符串、数字类型拼接到一起;
  5. 没有定义变量;
  6. == 错用成 =。

(二)知识点不熟练

浅浅的举两个例子吧,毕竟python的语法有那么多:

  1. 索引越界;
  2. append()不按照规定使用。

(三)思路不清晰

有很多看似很牛逼的项目,只用一个文件,几百行代码就能搞定,堪称高效。但如果你在里面好好的逛了一圈之后就一定会惊呼:“注释都救不了他了!”

(四)被动掉坑

代码逻辑没有错误,只因用户操作不当或意外情况导致程序崩溃。

解决方案:异常处置机制(出现异常及时捕获,内部消化,确保程序运行)

1、基础形式

try:
	......
	......
	......  # 可能出现异常的代码
excpet xxx:  # 填入可能会报错问题。若无法预知,可以直接使用 excpet:
	......
	......
	......  # 报错后执行的代码

2、拓展模式

try-except-else

若try块中没有抛出异常,则执行else块;若抛出异常,则执行except。

举个整数相除的例子:

try:
    a = int(input('请输入一个整数:'))
    b = int(input('请输入一个整数:'))
    c = a / b
except BaseException as e:
    print('有错误', e)
else:
    print(c)

try-except-else-finally

若try块中没有抛出异常,则执行else块;若抛出异常,则执行except;无论是否有异常,finally都会执行。

用finally优化一下刚才的程序:

try:
    a = int(input('请输入一个整数:'))
    b = int(input('请输入一个整数:'))
    c = a / b
except BaseException as m:
    print('有错误', m)
else:
    print(c)
finally:
    print('程序执行完毕!')

二、常见异常类型

序号名称释义
1ZeroDivisionError除(或取模)零(所有数据类型)
2ImportError序列中没有此索引
3KeyError映射中没有这个键
4NameError未声明/初始化变量
5SyntaxError语法错误
6ValueError传入无效参数
7TypeError不同类型连接在一起

三、Traceback模块的使用

对比起前两个程序,使用Traceback模块明显要

import traceback

try:
    print('----------------------------')
    print(10/0)  # 运行后会报错的
except:
    traceback.print_exc()

相关文章:

  • <栈和队列及模拟实现>——《Data Structure in C Train》
  • 猿创征文|【Typescript】搭建TS的编译环境
  • 【项目管理】beautyeye
  • Connor学Android - HandlerThread和IntentService
  • Github每日精选(第31期):macOS 下的亮度和音量调节MonitorControl
  • Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第7章 Vue.js高级进阶 7.10 路由守卫
  • 金融核心系统云原生转型的三个挑战、六个误区和四个步骤
  • zsh安装以及ROS适配
  • 猿创征文|FlexManager与阿里云MQTT通讯
  • Linux指令——crontab
  • 程序员的中秋
  • mysql数据库的安装教程
  • 新电脑的正确打开方式——(近万字图文并茂详细分步骤讲解)【包括个性锁屏,磁盘分区……】等你来解锁哦
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • 【毕业设计】基于单片机的手势检测识别系统 - arduino 物联网嵌入式
  • [数据结构]链表的实现在PHP中
  • 【技术性】Search知识
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ES6系统学习----从Apollo Client看解构赋值
  • Java方法详解
  • Java-详解HashMap
  • JSDuck 与 AngularJS 融合技巧
  • PHP 7 修改了什么呢 -- 2
  • React-redux的原理以及使用
  • 复习Javascript专题(四):js中的深浅拷贝
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 警报:线上事故之CountDownLatch的威力
  • 如何实现 font-size 的响应式
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 算法之不定期更新(一)(2018-04-12)
  • 微信小程序:实现悬浮返回和分享按钮
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 硬币翻转问题,区间操作
  • 栈实现走出迷宫(C++)
  • elasticsearch-head插件安装
  • 移动端高清、多屏适配方案
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​Linux·i2c驱动架构​
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (windows2012共享文件夹和防火墙设置
  • (二)JAVA使用POI操作excel
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)认识微服务
  • (转载)虚函数剖析
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .net core 3.0 linux,.NET Core 3.0 的新增功能