08:异常、模块与包
异常
Bug
异常的捕获
格式:
try:
可能出错的代码
except:
如果发生错误,执行的代码
捕获指定的异常:
try:
q=1/0
except ZeroDivisionError as a:
print(a)
捕获多个异常:
try:
# 尝试执行可能引发异常的代码
print(nm) # 这里可能引发 NameError,因为变量 nm 未定义
# 或者
q = 1/0 # 这里可能引发 ZeroDivisionError,因为除数不能为零
except (ZeroDivisionError, NameError) as a: # 捕获这两种特定类型的异常
# 打印异常信息
print(f"发生了一个错误: {a}")
# 可以在这里添加更多的错误处理逻辑
# 例如记录日志、发送错误通知等
# 也可以根据异常类型进行不同的处理
if isinstance(a, ZeroDivisionError):
print("处理除零错误...")
elif isinstance(a, NameError):
print("处理变量未定义错误...")
多个错误转化成元组的形式即可
有时候并不确定是什么异常,有几个异常
捕获所有异常
第一种
格式:
try:
可能出错的代码
except:
如果发生错误,执行的代码
就是最开头的
第二种:
try:
q = 1/0
except Exception as e:
print(e)
division by zero
注意:Exception开头必须大写,在编辑器打出来可能跳括号,不要括号
异常的else和finally语法
Else代表的是如果无异常需要执行的代码
代码:
try:
print("测试")
except Exception as e:
print(e)
else:
print("无异常")
运行结果:
测试
无异常
Finally后面是无论如何都要执行的代码
代码:
try:
print("测试")
except Exception as e:
print(e)
else:
print("无异常")
finally:
print("灵感菇")
输出:
测试
无异常
灵感菇
异常的传递
在函数的调用中
函数1调用了函数2
函数2调用了函数3
如果函数3有异常
函数1是可以用上面的异常的捕获
模块
模块就是一个python文件,以.py结尾
模块能定义函数、类、变量,模块也能包含可运行代码
可以认为模块就是一个工具箱
模块的导入语法
[from 模块名] import [模块或类或变量或函数或*(代表全部内容)] [as 别名]
[]代表可选,也可以没有
别名就是把第二个中括号内的另起一个自己的名字
Import模块名
Import 模块名
Import 模块1,模块2
模块名.功能名
这样来使用
优点就是打出 模块名. 的时候下面会弹出很多功能
Tip:CTRL+左键可进入模块查看
From 模块名 import 功能名
格式:
From 模块名 import 功能名
Tip:当功能名为*时,代表引入所有功能,这时候也能直接用功能,没有前置
这样直接用:
功能名()
Tip:也就是不像import一样要打前面的模块名.了 各有各的优点
自定义模块
自定义模块就是一个.py文件,直接新建,直接写就行
如果导入了同名的功能,最后一次导入的会把前面的覆盖掉
__main__与__all__
如果模块内有要测试的东西,调用模块可能直接输出了结果,这不是我们想要的
想要既能正常调用模块,又不影响模块内的测试
把测试放在
if __name__=="__main__":
即可
在from 模块 import *中
这个*代指的全部是__all__中的东西
__all__是一个列表变量
包
如果模块太多了,就要用包来管理模块了
从物理来看,包就是一个文件夹,在该文件下有一个__init__.py文件,其他的是各种.py模块
该文件夹可以用于包含多个模块文件
从逻辑上来看,包依然是模块
一堆模块 -> __init__.py -> 包
自定义包
右键项目主文件夹,新建,python 软件包
导入包
方法一:
引入:
Import 包名.模块名
调用:
包.模块.目标
这样调用的时候麻烦,但是准确
方法二:
from 包 import 模块
from 包 import 模块1,模块2
模块.目标
方法三:
from包.模块import功能
功能
__all__
在变量 __init__.py 中,是一个列表,存储模块名(不带.py)
From 包 import *
表示引入包中的所有模块
这个所有就代表的是__all__中的
第三方包
第一种:利用pip
用pip即可轻松安装
但是要在终端里面安装
Python文件里的终端
或者pycharm里面也有
格式:
pip install 包名称
这个默认是连接外网的
比较慢,或者连了梯子就快了
也可以使用镜像
pip install -i https://网站 包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
第二种:利用pycharm
右下角有python+版本号->解释器设置->小加号