深圳龙华新区住房和建设局网站,部门网站建设内容方案,字体图标网站,平面设计培训班教程Python-第九天 Python异常、模块与包一、了解异常1. 什么是异常#xff1a;2. bug是什么意思#xff1a;二、异常的捕获方法1. 为什么要捕获异常#xff1f;2. 捕获异常的语法3. 如何捕获所有异常#xff1f;三、异常的传递性1.异常是具有传递性的四、Python模块1. 什么是模…
Python-第九天 Python异常、模块与包一、了解异常1. 什么是异常2. bug是什么意思二、异常的捕获方法1. 为什么要捕获异常2. 捕获异常的语法3. 如何捕获所有异常三、异常的传递性1.异常是具有传递性的四、Python模块1. 什么是模块2. 如何导入模块3. 注意事项4.自定义模块4.1. 如何自定义模块并导入4.2. __name__变量的功能是4.3. 注意事项五、Python包1. 什么是Python的包2. __init__.py文件的作用3. __all__变量的作用六、安装第三方Python包1.什么是第三方包2. 如何安装2.1 在命令提示符内安装2.2 换源2.3 在PyCharm中安装3. 综合案例一、了解异常
1. 什么是异常
异常就是程序运行的过程中出现了错误
2. bug是什么意思
bug就是指异常的意思因为历史因为小虫子导致计算机失灵的案例所以延续至今bug就代表软件出现错误。
二、异常的捕获方法
1. 为什么要捕获异常
在可能发生异常的地方进行捕获。当异常出现的时候提供解决方式而不是任由其导致程序无法运行。
2. 捕获异常的语法
try:可能发生异常的语句
except[异常 as 别名:]如果出现异常执行的代码
[else:]未出现异常时应做的事
[finally:]不管出不出现异常都会做的事① 如果尝试执行的代码的异常类型和要捕获的异常类型不一致则无法捕获异常。 ② 一般try下方只放一行尝试执行的代码。
# 基本得捕获语法
try:f open(rC:\Users\xiaze\Desktop\1.txt,r,encodingUTF-8)
except:print(出现了异常因为文件不存在我将open的模式改为w模式去打开)f open(rC:\Users\xiaze\Desktop\1.txt,w,encodingUTF-8)# 捕获指定异常
try:print(name)# 1 / 0
except NameError as e:print(出现了变量名未定义)# 捕获多个异常
try:# print(name)1 / 0
except (NameError,ZeroDivisionError) as e:print(出现了变量名未定义或者除以0的异常)print(e)# 捕获所有异常
try:print(name)# 1 / 0
except Exception as e:print(出现异常了)print(e)3. 如何捕获所有异常
异常的种类多种多样如果想要不管什么类型的异常都能捕获到那么使用:
except:except Exception: 两种方式捕获全部的异常
三、异常的传递性
1.异常是具有传递性的
当函数func01中发生异常, 并且没有捕获处理这个异常的时候, 异常 会传递到函数func02, 当func02也没有捕获处理这个异常的时候 main函数会捕获这个异常, 这就是异常的传递性. 提示: 当所有函数都没有捕获异常的时候, 程序就会报错
利用异常具有传递性的特点, 当我们想要保证程序不会因为异常崩溃的时候, 就可以在main函数中设置异常捕获, 由于无论在整个程序哪里发生异常, 最终都会传递到main函数中, 这样就可以确保所有的异常都会被捕获。
四、Python模块
1. 什么是模块
模块就是一个Python代码文件内含类、函数、变量等我们可以导入进行使用。
2. 如何导入模块
模块在使用前需要先导入 导入的语法如下:
[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]常用的组合形式如
import 模块名from 模块名 import 类、变量、方法等from 模块名 import *import 模块名 as 别名from 模块名 import 功能名 as 别名
3. 注意事项
from可以省略直接import即可as别名可以省略通过”.”来确定层级关系模块的导入一般写在代码文件的开头位置
# import 模块名
# 使用import导入time模块的所有功能函数
import time
time.sleep(5)# from 模块名 import 类、变量、方法等
# 使用from导入time的sleep功能函数
from time import sleep
sleep(5)# from 模块名 import *
# 使用 * 导入time模块的全部功能
from time import *
sleep(5)# import 模块名 as 别名
import time as t
t.sleep(5)# from 模块名 import 功能名 as 别名
from time import sleep as sl
sl(5)4.自定义模块
4.1. 如何自定义模块并导入
在Python代码文件中正常写代码即可通过import、from关键字和导入Python内置模块一样导入即可使用。
4.2. __name__变量的功能是
if __name __ “__main __”表示只有当程序是直接执行的才会进入if内部如果是被导入的则if无法进入
def test1(a, b):print(ab)
if __name__ __main__:test1(2, 1)4.3. 注意事项
不同模块同名的功能如果都被导入那么后导入的会覆盖先导入的 __all__变量可以控制import *的时候哪些功能可以被导入
__all__ [test2]五、Python包
1. 什么是Python的包
包就是一个文件夹里面可以存放许多Python的模块代码文件通过包在逻辑上将一批模块归为一类方便使用。
2. init.py文件的作用
创建包会默认自动创建__init__.py的文件如果没有创建手动创建一个空的即可通过这个文件来表示一个文件夹是Python的包而非普通的文件夹。
3. __all__变量的作用
同模块中学习到的是一个作用控制 import * 能够导入的内容 __init__.py
__all__ [my_modle1] test.py
import myPackage.my_modle1
myPackage.my_modle1.test1()# from myPackage import my_modle2
# my_modle2.test2()# from myPackage import *
# my_modle1.test1()
# my_modle2.test2() # 无法使用my_modle1.py def test1():print(模块一的test1被调用) my_modle2.py def test2():print(模块二的test2被调用)
六、安装第三方Python包
1.什么是第三方包
我们知道包可以包含一堆的Python模块而每个模块又内含许多的功能。 所以我们可以认为一个包就是一堆同类型功能的集合体。
在Python程序的生态中有许多非常多的第三方包非Python官方可以极大的帮助我们提高开发效率如
科学计算中常用的numpy包数据分析中常用的pandas包大数据计算中常用的pyspark、apache-flink包图形可视化常用的matplotlib、pyecharts人工智能常用的tensorflow
这些第三方的包极大的丰富了Python的生态提高了开发效率。 但是由于是第三方所以Python没有内置所以我们需要安装它们才可以导入使用哦。
2. 如何安装
2.1 在命令提示符内安装
pip install 包名称使用指定源安装获取本次更快下载速度
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称2.2 换源
切换为国内镜像源获取以后所有文件更快下载速度
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple查看是否切换成功
pip config list2.3 在PyCharm中安装 3. 综合案例
创建一个自定义包名称为my_utils (我的工具 在包内提供2个模块
str_util.py 字符串相关工具内含 函数str_reverse(s)接受传入字符串将字符串反转返回函数substr(s, x, y)按照下标x和y对字符串进行切片 file_util.py文件处理相关工具内含 函数print_file_info(file_name)接收传入文件的路径打印文件的全部内容如文件不存在则捕获异常输出提示信息通过finally关闭文件对象函数append_to_file(file_name, data)接收文件路径以及传入数据将数据追加写入到文件中
构建出包后尝试着用一用自己编写的工具包。
新建文件夹 my_utils在文件夹下新建三个文件 __init__.py str_util.py file_util.py
如图所示 其中__init__.py为空
str_util.py 内容如下 str_util.py 字符串相关工具内含函数str_reverse(s)接受传入字符串将字符串反转返回函数substr(s, x, y)按照下标x和y对字符串进行切片
def str_reverse(s):str_reverse(s),接受传入字符串将字符串反转返回:param s: 传入的字符串:return: 反转后返回的字符串s s[::-1]return sdef substr(s, x, y):substr(s, x, y)按照下标x和y对字符串进行切片:param s: 传入的字符串:param x: 切片的起始位置包含:param y: 切片的结束位置不包含:return: 切片后的新字符串s s[x:y]return s# if __name__ __main__:
# print(str_reverse(abcdefg)) # gfedcba
# print(substr(abcdefg, 2, 5)) # cde
file_util.py内容如下 file_util.py文件处理相关工具内含函数print_file_info(file_name)接收传入文件的路径打印文件的全部内容如文件不存在则捕获异常输出提示信息通过finally关闭文件对象函数append_to_file(file_name, data)接收文件路径以及传入数据将数据追加写入到文件中
def print_file_info(file_name):print_file_info(file_name),接收传入文件的路径打印文件的全部内容如文件不存在则捕获异常输出提示信息通过finally关闭文件对象:param file_name: 传入文件的路径:return: 无返回值try:f open(file_name, r, encodingUTF-8)except Exception as e:print(f打开文件失败{e})else:# 打开成功打印全部内容for line in f:print(line)f.close()def append_to_file(file_name, data):append_to_file(file_name, data),接收文件路径以及传入数据将数据追加写入到文件中:param file_name: 传入文件的路径:data: 需要追加到文件中的数据:return: 无返回值f open(file_name, a, encodingUTF-8)f.write(data)f.close()# if __name__ __main__:
# # print_file_info(rD:\YuanMa\html\y-k-q\Python\day01-jc\1.txt)
# append_to_file(rD:\YuanMa\html\y-k-q\Python\day01-jc\1.txt,
# hhhhhhhhhhhhh\ndddddddddddd)
测试模块内容为
from my_utils import file_util
from my_utils import str_utilprint(str_util.str_reverse(abcdefg)) # gfedcba
print(str_util.substr(abcdefg, 2, 5)) # cdefile_util.print_file_info(rD:\YuanMa\html\y-k-q\Python\day01-jc\1.txt)
file_util.append_to_file(rD:\YuanMa\html\y-k-q\Python\day01-jc\1.txt, aaaaaaaaaa)
file_util.print_file_info(rD:\YuanMa\html\y-k-q\Python\day01-jc\1.txt)