Python的进阶之道【AIoT阶段一(上)】(十五万字博文 保姆级讲解)—玩转Python语法(二):面向对象(三)

简介: 玩转Python语法(二):面向对象

2.你是来找茬的吧?

*2.1 bug 与 debug

注:本小节带 *,不需要进行学习,可以简单进行了解

⛲️ 所谓 bug 其实有一个有趣的小故事:有一天,计算机程序之母Grace Hopper正在用马克二号调试程序,但程序却一直出现错误,所以她开始了层层排查,拆开了继电器之后她发现有一只飞蛾夹在了触点之间,卡住了机器的运行,她把虫子的尸体拿出来之后,把它粘到了自己的工作日记上,并喊它为bug(臭虫),从此 bug 化身计算机领域故障的代言词,而 debug 的意思就是为程序排除错误.


2.2 bug 的常见错误类型

2.2.1 粗心导致的错误

🚩粗心导致的错误其实是最不应该犯的错误,如果你有很多的粗心错误,那么证明,你对于 Python 的语法还不是十分的熟练,还需要继续刷题如果你把本博客中 Python程序设计训练场 的题目已经全部自己手动打过一遍了,是绝对不会再犯这种的错误的,在这里,我也总结了一些粗心的错误,大家要牢记以下几点:

1.漏了末尾的冒号,如if语句,循环语句,else子句,自定义函数等

2.缩进错误,该缩进的没缩进,不该缩进的瞎缩进

3.把英文符号写成中文符号,比如说:引号,冒号,括号

4.字符串拼接的时候,把字符串和数字拼在一起

5.没有定义变量,比如说while的循环条件的变量

6.“==”比较运算符和”=”赋值运算符的混用


2.2.2 知识点掌握不熟练导致的错误

🚩这个错误究其根本其实是和 1.2.1 粗心导致的错误 是一个属性的,比如可能会犯的列表索引越界的错误,亦或者是使用一些函数时的错误,这都是我们不熟练才导致的错误,这些错误是低级的,且是最容易更改的,唯一的办法就是:练练练!,这里强烈建议大家要刷完本博客中 Python程序设计训练场 的题目,这些题目都是博主精挑细选出来的,并且所有的题目都支持线上提交的功能。


2.2.3 思路不清导致的错误

🚩思路不清晰的错误可以说是最复杂的一个错误了,导致这个错误的原因可能有很多,拿面向过程来说,你的代码很可能会提示出现超时,亦或者是出现段错误,在竞赛中调试代码有一个很强大的操作:print 大法,即我们把我们过程中改变的量全部输出一下,尤其是例如列表,字典这种数据结构,我们输出一下它们的值,看一下是否符合预期要求,不符合的话就可以进行更改;还有一个强大的操作那就是注释大法,这个操作我们在超时和段错误的时候尤其使用,注释掉一大段内容,查看是否代码仍然超时或显示段错误,如果没有显示,那么证明,错误的代码就是你注释掉的代码,这种方法可以帮我们缩减代码的调试范围。


2.2.4 被动掉坑导致的错误

🚩这个错误其实在绝大多数情况下是没有任何问题的,它大多来源于一些奇人的神奇操作,但这不可否认是我们代码的鲁棒性较差,即代码不够健壮,举个例子,比如我们要求用户输入自己的年龄,99.9%的用户都会正常的输入自己的年龄,但总不免排除那么一两个奇葩输入自己的名字或者其他字符,这般操作后,和我们的期初要求显然是不符合的,程序自然会崩溃,亦或者是计算两个数相除,我们知道除数不可为0,大多数人用计算器也不会进行 1/0 等等这类操作,但是也总不乏有人真的输入了 1/0 这样的案例,这同样会导致我们的程序崩溃,针对以上的现象,在 Python 中提供了异常处理机制,可以在异常出现的时候立即补货,然后在内部进行“消化”,从而使得程序正常运行。代码语法结构为:

try:
  可能异常的代码1
  可能异常的代码2
  ......
except 异常类型:
  异常处理代码1(报错后执行的代码)
  异常处理代码2(报错后执行的代码)
  ......

我们就拿除数不得为0来写一个代码:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 21:17
# 欢迎大家关注AIoT相关博客~
try:
    a = int(input('请输入被除数:'))
    b = int(input('请输出除数:'))
    print(a / b)
except ZeroDivisionError:
    print('对不起,除数不得为0')
print('程序结束')

image.png

当然啦,我们说过,奇葩到处有,代码中特别多,我们从上述代码处理后其实就可以避免输入除数等于0这种异常,但是会不会有人让你输入数字,他却偏偏输入字母呢?可能没有,但作为程序员的我们这些细节必须考虑到,为此,你会发现,可能有多个不同的异常,这个时候就需要多个 except 结构,这里出现了多个异常,我们对于异常的处理顺序有这样的规定:捕获异常的顺序按照先子类后父类的顺序,为了避免遗漏可能出现的异常,可以在最后加 BaseException,表示对其他所有的异常都进行一个捕获,这里你还不了解什么是子类和父类,这个我们会在后续中进行讲解,这里你只需要知道,捕获异常的顺序是和我们解决问题的顺序是一致的,都是先解决小问题,再解决大问题,其语法结构如下:

try:
  可能异常的代码1
  可能异常的代码2
  ......
except 异常类型1:
  异常处理代码1(报错后执行的代码)
  异常处理代码2(报错后执行的代码)
  ......
except 异常类型2:
  异常处理代码1(报错后执行的代码)
  异常处理代码2(报错后执行的代码)
  ......
......
except BaseException:
  异常处理代码1(报错后执行的代码)
  异常处理代码2(报错后执行的代码)
  ......

更改后我们的除法程序:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 21:17
# 欢迎大家关注AIoT相关博客~
try:
    a = int(input('请输入被除数:'))
    b = int(input('请输出除数:'))
    print(a / b)
except ZeroDivisionError:
    print('对不起,除数不得为0')
except ValueError:
    print('请输入数字')
print('程序结束')

image.png

2.3 try…except…else结构

🚩如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块,我们更改上述代码:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 21:17
# 欢迎大家关注AIoT相关博客~
try:
    a = int(input('请输入被除数:'))
    b = int(input('请输出除数:'))
    print(a / b)
# 代表捕获所有错误,并把错误原因放入e
except BaseException as e:
    print('出错了,出现的错误为:', e)
else:
    print('程序完好,结果为:', a / b)

image.png

image.png

2.4 try…except…else…finally结构

🚩finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源,比如我们后续学习文件处理的时候文件的关闭的东西以及数据库的连接的内容都会放在 finally 当中,这段代码是无论是否产生异常都会执行的一段代码,流程图如下图所示:

image.png

对上述代码再次进行修改:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 21:17
# 欢迎大家关注AIoT相关博客~
try:
    a = int(input('请输入被除数:'))
    b = int(input('请输出除数:'))
    print(a / b)
# 代表捕获所有错误,并把错误原因放入e
except BaseException as e:
    print('出错了,出现的错误为:', e)
else:
    print('程序完好,结果为:', a / b)
finally:
    print('谢谢您的使用')


image.png

image.png

2.5 Python中常见的异常类型

🚩下表是 Python 中常见的异常类型,注意,Python 中的异常类型有很多,我们需要在后续的代码生涯中不断的总结:

异常类型 描述
ZeroDivisionError 除(或取模)0
IndexError 序列中没有此索引(index)
KeyError 映射中没有这个键
NameError 未声明/初始化对象(没有属性)
SyntaxError Python 语法错误
ValueError 传入无效的参数
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 21:53
# 欢迎大家关注AIoT相关博客~
# (1)ZeroDivisionError:
# print(10/0)
# (2)IndexError:
'''
l = [1, 2, 3, 4]
print(l[4])
'''
# (3)KeyError
'''
d = {'name':'辰chen', 'age': 19}
print(d['location'])
'''
# (4)NameError
# print(res)
# (5)SyntaxError
# int age = 19
# (6)ValueError
# age = int('辰chen')

2.6 traceback模块

🚩我们使用traceback模块打印异常信息,使用 traceback 模块之前需要先导包:import traceback,使用 traceback 模块是因为,我们处理的这些异常细节,有可能在后续被存入到文件当中,去放到我们的日志文件里,所以我们会使用 traceback 模块将异常信息存储到文件里,我们把这种文件叫做 log 日志。

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 22:20
# 欢迎大家关注AIoT相关博客~
import traceback
try:
    print('--------------')
    print(1 / 0)
except:
    traceback.print_exc()

image.png

2.7 Python的程序调试

🚩程序的调试是我们程序员必备的本领,接下来我们来讲解如何使用 PyCharm 调试 Python 代码

1️⃣ 断点,程序运行到断点处,会暂时挂起,停止执行。此时可以详细观察程序的运行情况,方便做出进一步的判断:

image.png

我们在程序的蓝色区域可以设置断点,只需要鼠标左键点击即可,那个红色的点就是所谓的断点,再次点击这个红色的点就会取消断点


2️⃣ 进入调试视图

进入调试视图的三种方式

(1)单击工具栏上的按钮

(2)右键单击编辑区:点击:debug’模块名’

(3)快捷键:shift+F9

image.png



目录
相关文章
|
12月前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
269 7
|
8月前
|
Python
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。
|
8月前
|
Python
课时19:Python的基本语法
今天给大家带来分享的是 Python 的基本语法,分为以下六个部分。 1.在 Python 中严格区分大小写 2.Python 中的每一行就是一条语句,每条语句以换行结束 3.Python 中每一行语句不要过长 4.条语句可以分多行编写,语句后边以\结尾 5.Python 是缩进严格的语言,不要随便写缩进 6.在 Python 中使用#来表示注释
146 2
|
12月前
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
477 61
|
10月前
|
存储 开发者 Python
python基本语法
Python的基本语法简洁而强大,支持多种编程范式,包括面向对象编程和函数式编程。通过掌握变量和数据类型、操作符、控制结构、函数、类和模块等基本概念,可以有效地编写高效、可读的Python代码。无论是初学者还是经验丰富的开发者,Python都提供了丰富的工具和库来满足各种编程需求。
326 13
|
11月前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
12月前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
220 1
|
人工智能 分布式计算 前端开发
3大阶段,30+教程,超全年度 Python 礼包大放送 | 技术日报(15期)
Python简单易懂,功能强大,同时也是大数据、人工智能时代的首选编程语言之一。这两年 Python 如破竹之势一般出现在开发者眼前,甚至有许多非技术人员也会想通过学习 Python 来提高自己的工作效率。这么火的语言,开发者社区当然要为你带来 “Python 学习大礼包” 了!
1034 0
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
242 102
|
2月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
276 104

推荐镜像

更多