当前位置: 首页 > news >正文

异常的传递性|模块的概念和导入|自定义模块并导入

P93 异常的传递性

异常的传递

当函数func01中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02,当func02也没有捕获处理这个异常的时候main函数会捕获这个异常,这就是异常的传递性。

def func01():print("这是func01开始")num=1/0print("这是func01结束")    # 异常在func01中没有被捕获
def func02():print("这是func02开始")func01()print("这是func02结束")    # 异常在func02中没有被捕获
def main():try:func02()      # 异常在main中被捕获except Exception as e:print(f"出现异常了,异常的信息是:{e}")main()

提示:

当所有函数都没有捕获异常的时候,程序就会报错。

P94 模块的概念和导入

什么是模块

python模块(Module),是一个python文件,以.py结尾。模块能定义函数,类和变量,模块里也能包含可执行的代码。

模块的作用:python中有很多各种不同的模块,每一个模块都可以帮助我们快速地实现一些功能,比如实现和时间相关的功能就可以使用time模块。

我们可以认为一个模块就是一个工具包,每一个工具包中都有各种不同的工具供我们使用进而实现各种不同的功能。

大白话:模块就是一个python文件,里面有类、函数、变量等,我们可以拿过来用(导入模块去使用)。

模块的导入方式

模块在使用前需要先导入 导入的语法如下:

[from 模块名] import [模块|类|变量|函数|*] [as 别名]

常用的组合形式如:

  • import 模块名
  • from 模块名 import 类、变量、方法等
  • from 模块名 import *
  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名
import模块名

基本语法

import 模块名
import 模块名1,模块名2
模块名.功能名()

案例:导入时间模块

# 导入time模块
import time      # 导入python内置的time模块(time.py这个代码文件)print("开始")
# 让程序睡眠1秒(阻塞)
time.sleep(1)     # 通过.就可以使用模块内部的全部功能(类、函数、变量)
print("结束")

from 模块名 import 功能名

基本语法:

from 模块名 import 功能名
功能名()

案例:导入time模块中的sleep方法

# 使用from导入time模块使用sleep功能(函数)
from time import sleep
print("你好")
sleep(4)
print("我好")

from 模块名 import *

基本语法:

from 模块名 import *
功能名()

案例:

# 使用*号导入time模块的全部功能
from time import *     # *表示全部的意思
print("你好")
sleep(3)
print("我好")

as定义别名

基本语法:

# 模块定义别名
import 模块名 as 别名# 功能定义别名
from 模块名 import 功能 as 别名
案例1:
# 使用as给特定功能加上别名
import time as t
print("你好")
t.sleep(2)
print("我好")

案例2:
from time import sleep as sl
print("你好")
sl(2)
print("我好")

P95 自定义模块并导入

制作自定义模块

python中已经帮我们实现了很多的模块。不过有时候我们需要一些个性化的模块,这里就可以通过自定义模块实现,也就是自己制作一个模块

案例:新建一个python文件,命名为my_module1.py,并定义test函数

# 自定义模块
def test(a,b):print(a+b)test(1,2)

# 导入自定义模块使用
import my_module1
my_module1.test(1,2)

from my_module1 import test
test(1,2)

注意:

每个python文件都可以作为一个模块,模块的名字就是文件的名字,也就是说自定义模块名必须需要符合标识符命名规则

注意事项:

# 模块1代码
def my_test(a,b):print(a+b)# 模块2代码
def my_test(a,b):print(a-b)# 导入模块和调用功能代码
from my_module1 import my_test
from my_module2 import my_test# my_test函数是模块2中的函数
my_test(1,1)

当导入多个模块(my_module1、my_module2)的时候,且模块内有同名功能(my_test),当调用这个同名功能的时候,调用到的是后面导入的模块的功能.

测试模块

在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,例如,在my_module1.py文件中添加测试代码test(1,1)

from my_module1 import test

如何想在my_module1中添加测试,但是又不想在调用的时候显示测试结果呢?

答案:在my_module1中添加如下语法,意思是:当运行my_module1的时候,test内置变量会变成__main__,结果为true,模块就会运行,并显示测试结果;但是在调用文件中运行,模块内置结果便没有变成__main__,模块的测试就不会执行。

__all__

如果一个模块文件中有“__all__”变量,当使用“from xxx import *”导入时,只能导入这个列表中的元素。

# 如果既调用testa又调用testb
from my_module1 import *
testa(1,2)
testb(2,1)

# 如果只调用testa
from my_module1 import *
testa(1,2)

但是手动import testb是可以的,因为__all__只作用在*上

http://www.dtcms.com/a/293901.html

相关文章:

  • Nginx + PM2 实现Express API + React 前端 本地测试服务器搭建
  • 从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践
  • [特殊字符] 从数据库无法访问到成功修复崩溃表:一次 MySQL 故障排查实录
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十二课——车牌识别的FPGA实现(4)车牌字符的分割定位
  • 基于Tornado的WebSocket实时聊天系统:从零到一构建与解析
  • 简单理解现代Web应用架构:从简单到企业级
  • 棱镜技术在光谱相机中应用
  • 【Unity实战100例】Unity资源下载系统开发流程详解(移动端、PC端 ,局域网控制台服务)
  • K8s:离线部署Kubernetes1.26.12及采用外部Harbor
  • DApp的未来发展趋势是什么?
  • solidity从入门到精通 第四章:智能合约的生命周期
  • 糖尿病数据分析:血压与年龄关系可视化
  • 二重循环之练习输入行数,打印等腰三角形
  • 同一个端口无法同时配置基于 server_name 的 HTTP(非加密)和 HTTPS(加密)
  • 【矩阵专题】Leetcode73.矩阵置零
  • 西门子 S7-1500分布式 I/O通信 :PROFINET IO 与 PROFIBUS DP详解(下)
  • 9、STM32的启动过程
  • Ubuntu系统下FFmpeg源码编译安装
  • 面试150 建立四叉树
  • 电脑32位系统能改64位系统吗
  • Linux下的lcd屏幕显示操作
  • 【前端】【Vue DevTools】Vue DevTools 进阶:用 Trae / Cursor 替换 VSCode 打开文件(跳转行列无误)
  • 直播一体机技术方案解析:基于RK3588S的硬件架构特性​
  • 7.23 减肥感悟
  • 为什么IMU是无人机稳定控制的的核心?
  • 深入解析Hive SQL转MapReduce的编译原理:从AST抽象语法树到Operator执行树
  • 无人机光伏巡检误检率↓78%!陌讯多模态融合算法实战解析
  • 【趣味解读】淘宝登录的前后端交互机制:Cookie-Session 如何保障你的账户安全?
  • 【网络编程】二、socket编程
  • 趣玩-Ollama-Llm-Chatrbot