Python中的异常处理以及模块介绍 -*- Python基础知识11 -*-

异常

在程序运行时,不可避免的会出现一些错误,在Python中一旦出现异常会停止执行之后的代码,Python希望在出现异常是,我们能及时处理。
在这里插入图片描述
异常有时候是因为开发失误造成的,这时候我们可以通过修改源码,来修复bug,但有时异常可能是用户的一些非法操作造成的,这时候我们就需要来处理异常了。

异常相当于一个类,所有异常都有有一个exception的父类。异常出现的时候其实就相当于程序抛出了异常这个类。
在这里插入图片描述

处理异常

有时候,我们希望及时发生异常,程序还是能照常执行下去,这时候我们就要用到try。

try语句

语法:

try: # 用来判断是否会出错的语句
    pass
except 异常类型: # 如果报错则输出的内容
    pass
except 异常类型: # 如果报错则输出的内容
    pass
except 异常类型: # 如果报错则输出的内容
    pass
...
else: # 如果没有报错则输出的内容
    pass
finally: # 无论有没有异常都会执行
    pass

我们可以将可能出现异常的内容放在try中,让程序进行判断,如果出现异常则会输出except中的内容,程序不会就此终止,而是会继续运行下去。

try:
    a = 6
    b = '66'
    c = a + b
except:
    print('程序报错啦')
    
# 程序会输出‘程序保存啦’

except虽然后面可以不更任何东西,但PEP8并不推荐这样做,因为这时候会将所以报错类型都执行同样的替代结果。我们最好指定一下需要except进行处理的报错类型。

a = 6
b = '66'
try:
    c = a + b

except TypeError:
    print(f'{type(a)}类型和{type(b)}类型不能执行运算')

这样做的好处是可以让人更清楚异常是什么导致的,以便之后的处理。
except类似于elif,可以重复使用。
但如果我们并不清楚会出现异常是那些,我们可以在Exception后添加Exception,这个所有异常的父类。添加了exception后我们可以通过它读取到异常信息。
在这里插入图片描述
语法中还有一个else和finally的参数,这两个参数在于程序没有报错时执行和程序不管报不报错都会执行。
在这里插入图片描述

异常的传播

如果异常出现在某个没有被调用的函数或方法中,异常不会传播。一旦调用异常会进行传播。
在这里插入图片描述
异常会传播到所有调用过异常的地方,但究其根本只是异常发生的地方出现了错误,其余地方并不需要管,只需根治根源即可解决所有异常。

自定义异常

在一些特定的时候,我们需要自定义一些异常用来提示其他人错误的原因,这时候就需要raise函数
在这里插入图片描述
如果你不想使用以及定义好的异常,我们可以自定义一个新的异常,定义异常相当于创建一个父类为Exception的类
在这里插入图片描述
自己定义异常的情况一般会在制作模块的时候使用,这种方法可以引导使用者正确的使用你定义的模块

模块

模块化:将一个完整的程序分解成一个一个小模块,通过将模块的组合,来搭建出一个完整的程序,让搭建程序的过程就类似于搭积木。

模块化的优点

  1. 方便开发
    模块化开发方便多人团队合作开发,可以多个人同时进行制作模块,最终再将模块拼装成完整的程序,满足了高效快捷的开发需要。
  2. 方便维护
    当程序出问题的时候可以快速定位到是哪个模块导致的,然后可以只对此模块进行修复,降低后期维护成本。
  3. 方便复用
    模块对复用有着良好的支持,一次开发处处可用,Python中的pip这个包管理器就是用来下载个个打包好的模块,通过pip我们可以快速使用他人写好的模块。

模块的使用

创建模块

在Python中,每个py文都就是模块,创建py文件就相当于创建模块

引入模块

模块的引入可以在程序中任意位置进行,但一般都会在程序开始的位置引入,这不仅符合大多数开发者的习惯,而且方便于查找引用了那些模块。

  1. 使用import引入
    语法:import 模块名import 模块名 as 别名
    模块名就是Python的文件名,我们可以给模块名起一个别名,方便我们记忆和调用。
    调用:== 模块名.函数(类、变量)==

  2. 使用from引入
    当我们只需要模块中莫个功能而不是全部功能时,这时候可以通过from来调用莫个功能即可,减少内存的使用可以加快程序的速度。
    语法: from 模块名 import 变量、变量(函数、对象)…
    如果使用from 模块名 import *,可引用全部内容。
    调用:变量(函数、对象)
    使用from同样可以在每个变量后加入as添加别名。

  3. 用import 模块名和from 模块名 import *区别
    使用import的时候调用模块时需要添加模块名,相当于把模块以一个类的方式添加到了我们的代码中,使用from添加的调用时直接写添加的变量即可,相当于把模块中的代码直接复制到了我们的代码当中。
    import这样的方法好处就是如果模块中有的对象,我们也有时,不会被覆盖,而from就会被覆盖。

a = '我是变量a'

# text中有一行代码是:a = '外部模块中的a'
from text import *  
import text

print(a)

这里使用from调用后 a输出为外部模块中的a,使用import调用后,输出为我是变量a。

调用模块

调用模块的时候类似于使用类的实例的方法。
访问模块中的变量、函数或对象。
语法:模块名.变量名(函数名、对象名)

__name__

这是每个模块中都会含有的魔术方法,这个方法用来返回模块名,但如果在主模块使用__name__则会返回__main__。

import text

data = __name__

print(f'模块中输出__name__的结果为:{text.data},主函数输出的结果为:{data}')
# 模块中输出__name__的结果为:text,主函数输出的结果为:__main__

通过这个特性,我们可以做一个if判断,让模块中的代码只会在主模块中运行。

if __name__ == '__main__':

标准库(内置模块)

当我们在计算机中安装Python时,Python会自带一些扩展的工具,这些扩展工具就是我们所说的标准库。
我们常用的datetime()random()os()等都属于内置模块,内置模块种类众多,我们就不在这里赘述了如果有需要可以自行查阅个模块的说明文档。Python3.8.0标准库文档

发布了47 篇原创文章 · 获赞 23 · 访问量 3430

猜你喜欢

转载自blog.csdn.net/qq_39611230/article/details/102811034