python异常处理优点_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的类

自己定义异常的情况一般会在制作模块的时候使用,这种方法可以引导使用者正确的使用你定义的模块

模块

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

模块化的优点

方便开发

模块化开发方便多人团队合作开发,可以多个人同时进行制作模块,最终再将模块拼装成完整的程序,满足了高效快捷的开发需要。

方便维护

当程序出问题的时候可以快速定位到是哪个模块导致的,然后可以只对此模块进行修复,降低后期维护成本。

方便复用

模块对复用有着良好的支持,一次开发处处可用,Python中的pip这个包管理器就是用来下载个个打包好的模块,通过pip我们可以快速使用他人写好的模块。

模块的使用

创建模块

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

引入模块

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

使用import引入

语法:import 模块名 或 import 模块名 as 别名

模块名就是Python的文件名,我们可以给模块名起一个别名,方便我们记忆和调用。

调用:== 模块名.函数(类、变量)==

使用from引入

当我们只需要模块中莫个功能而不是全部功能时,这时候可以通过from来调用莫个功能即可,减少内存的使用可以加快程序的速度。

语法: from 模块名 import 变量、变量(函数、对象)…

如果使用from 模块名 import *,可引用全部内容。

调用:变量(函数、对象)

使用from同样可以在每个变量后加入as添加别名。

用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标准库文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值