Python基础:19、Python异常、模块与包

1)python异常
  1. 什么是异常:异常就是程序运行的过程中出现了错误

  2. bug是什么意思:bug就是指异常的意思,因为历史因为小虫子导致计算机失灵的案例,所以延续至今,bug就代表软件出现错误。

2)异常的捕获方法

捕获常规异常:

try:可能发生错误的代码
except:如果出现异常执行的代码
# 基本捕获语法
try:f = open("5.txt", "r", encoding="UTF-8")
except:print("出现异常了,因为文件不存在,我将open模式更改为“w”模式去打开")f = open("5.txt", "w", encoding="UTF-8")

捕获指定异常:

# 捕获指定异常
try:print(name)
except NameError as e:print("出现了变量未定义的异常")

① 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。

② 一般try下方只放一行尝试执行的代码。

捕获多个异常:

# 捕获多个异常
try:print(name)1/0
except (NameError, ZeroDivisionError) as e:print("出现了变量未定义的异常")

捕获所有异常:

# 捕获所有异常
try:1/0
except Exception as e:print("出现异常")

捕获所有异常的else和finally:

try:1/0
except Exception as e:print("出现异常")
else:print("无异常")
​
finally:print("有无异常,都要执行到finally")

3)异常的传递

def func1():print("func1开始执行")num = 1 / 0    # 除以0的异常print("func1执行结束")
​
# 定义一个无异常的方法,调用上面的方法
def func2():print("func2开始执行")func1()print("func2执行结束")
​
# 定义一个方法,调用上面的方法
def main():try:func2()except Exception as e:print(f"出现异常了,异常信息是:{e}")
​
main()

4)python模块

模块:

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

语法:

[from 模块名] import [模块 | 类 | 变量 | 函数 | *][as 别名]
常用的组合形式如:
import 模块名
from 模块名 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名

import 模块名

语法:

import 模块名
import 模块名1 模块名2
​
模块名.功能名()
# 使用import导入time模块使用sleep功能(函数)
import time  # 导入python内置的time模块(time.py这个代码文件)
print("你好")
time.sleep(5)
print("我好")

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

# 使用 * 导入time模块的全部功能
from time import *
print("你好")
sleep(5)
print("我好")
# 使用as给特定的功能加上别名
# import time as t
# print("你好")
# t.sleep(5)
# print("我好")
from time import sleep as sl
print("你好")
sl(5)
print("我好")
 

导入自定义模块:

注意:自定义模块名必须要符合标识符命名规则

导入自定义模块使用

test_mode1.py

def add_num(x, y):print(x + y)

自定义模块

from test_mode1 import add_num
add_num(15, 7)
结果:22

导入不同模块的同名功能

test_mode1.py

def add_num(x, y):print(x + y)

test_mode2.py

def add_num(x, y):print(x - y)

自定义模块

from test_mode1 import add_num
from test_mode2 import add_num
add_num(15, 7)
结果:8

注意事项:当导入多个模块的时候,且模块内有同名功能. 当调用这个同名功能的时候,调用到的是后面导入的模块的功能

总结

1.如何自定义模块并导入?

       在Python代码文件中正常写代码即可,通过import、from关键字和导入Python内置模块一样导入即可使用。

2.main变量的功能是?

      if main == “main”表示,只有当程序是直接执行的才会进入if内部,如果是被导入的,则if无法进入

3.注意事项

•不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的

all变量可以控制import *的时候哪些功能可以被导入

5)python包

1.先创建一个Python软件包,如:my_package(包里会自动生成_ _ init _ _.py文件)

2.在包里创建函数模块,如my_module1,my_module2

使用形式:

my_module1.py

def info_print1():print("我是模块1的功能函数代码")

my_module2.py

def info_print2():print("我是模块2的功能函数代码")

包.py

# 创建一个包
# 导入自定义的包中的模块,并使用
# import my_package.my_module1
# import my_package.my_module2
#
# my_package.my_module1.info_print1()
# my_package.my_module2.info_print2()
​
# from my_package import my_module1
# from my_package import my_module2
# my_module1.info_print1()
# my_module2.info_print2()
​
from my_package.my_module1 import info_print1
from my_package.my_module2 import info_print2
info_print1()
info_print2()

__init__.py的内容:
__all__ = ['my_module1']
​
​
# 通过__all__变量,控制import
from my_package import *
my_module1.info_print1()

总结:

  • 什么是Python的包?

包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。

  • init.py文件的作用?

创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是Python的包,而非普通的文件夹。

  • all变量的作用?

同模块中学习到的是一个作用,控制 import * 能够导入的内容

6)安装第三方包

方法1:

1. win + R
​
2. cmd
​
3. pip install numpy(numpy:包名称,这是直接访问国外的网站,下载较慢,可能下载失败)
​pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称(清华大学提供的一个网站,可供pip程序下载第三方包)

方法2:

等待自动下载完成即可。

方法3:

1. 进入Python解释器(PyCharm)中

可加快在下载速度

总结:

  • 什么是第三方包?有什么作用?

第三方包就是非Python官方内置的包,可以安装它们扩展功能,提高开发效率。

  • 如何安装?

•在命令提示符内:

•pip install 包名称

•pip install -i Simple Index 包名称

•在PyCharm中安装

7)综合练习

练习案例:自定义工具包

创建一个自定义包,名称为: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),接收文件路径以及传入数据,将数据追加写入到文件中

str_util.py

"""字符串相关的工具模块
​- 函数:str_reverse(s),接受传入字符串,将字符串反转返回- 函数:substr(s, x, y),按照下标x和y,对字符串进行切片
"""
def str_reverse(s):"""将字符串进行反转操作:param s:将要被反转的字符串:return:反转后的字符串"""return s[:: -1]
​
def substr(s, x, y):"""按照给定下标完成字符串的切片:param s:将要被反转的字符串:param x:切片开始下标:param y:切片结束下标:return:切片完成后的字符串"""
​return s[x: y]
​
if __name__ == '__main__':print(str_reverse("hello world"))print(substr("12345", 2, 4))
​

file_util.py

"""文件处理相关的工具模块
​- 函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象- 函数:append_to_file(file_name, data),接收文件路径以及传入数据,将数据追加写入到文件中
"""
​
def print_file_info(file_name):"""将给定路径的文件内容打印到控制台上:param file_name: 即将读取文件的路径:return:None"""f = Nonetry:f = open(file_name, "r", encoding="UTF-8")content = f.read()print("文件内容如下:")print(content)except Exception as e:print(f"文件打开异常,Error:{e}")finally:if f:  # 如果变量是None,表示False,如果有任何内容,就是Truef.close()
​
def append_to_file(file_name, data):"""将指定的数据追加到指定文件中:param file_name:指定的文件路径:param data:指定的数据:return:None"""f = open(file_name, "a", encoding="UTF-8")f.write(data)f.write("\n")f.close()print("内容追加完成!")
​
if __name__ == '__main__':# print_file_info("F:/Vscode-project/Python_project/test_txt/bill.txt")append_to_file("F:/Vscode-project/Python_project/test_txt/bill.txt", "你好")
主调用包:
# 创建my_utils 包,在包内创建:str_util.py和file_util.py两个模块,并提供相应的功能
​
import my_utils.str_utils
from my_utils import file_utils
​
print(my_utils.str_utils.str_reverse("123456"))
print(my_utils.str_utils.substr("123456789", 4, 6))
​
file_utils.print_file_info("F:/Vscode-project/Python_project/test_txt/2.txt")
#file_utils.append_to_file("F:/Vscode-project/Python_project/test_txt/2.txt", "hello world!")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitlab的基本用法之创建用户和组

安装好gitlab后要做一些基本的创建 创建顺序:先创建组——再创建项目——最后创建用户项目、组、用户的关系:把创建的用户和项目加入组中,只有同一组的用户才能操作该组的项目。 一、创建群组 点击设置就可以看到刚才创建的组 二、创建项…

SpringCloudStream使用StreamBridge实现延时队列

利用RabbitMQ实现消息的延迟队列 一、安装RabbitMQ 1、安装rabbitmq 安装可以看https://blog.csdn.net/qq_38618691/article/details/118223851,进行安装。 2、安装插件 安装完毕后,exchange是不支持延迟类型的,需要手动安装插件,需要和安装的rabbitmq版本一致 https:…

可以在桌面上用的倒计时提醒app下载

在忙碌的工作日常中,我们常常需要记住各种截止日期和重要事件。为了确保这些任务按时完成,一款桌面倒计时提醒应用变得尤为重要。想象一下,当你在电脑桌面上就能清晰地看到剩余时间,这无疑会增加你的工作效率和紧迫感。 敬业签就…

红日安全vulnstack (二)

目录 环境搭建 网卡设置 修改Kali网段 IP 分布 WEB渗透 Weblogin服务开启 漏洞扫描 CVE工具利用 MSF上线 内网渗透 域内信息收集 凭证横向移动 权限维持 黄金票据 参考文章 https://www.cnblogs.com/bktown/p/16904232.htmlhttps://blog.csdn.net/m0_75178803/ar…

好用的python相关的AI工具Bito介绍

插件名称:Bito 好用的python相关的AI工具Bito介绍 step 1:点插件step 2:搜索bito并安装step3 :需要登录,要有真实邮箱,按步骤走就行,完后就可以使用 step 1:点插件 step 2:搜索bito并安装 step3…

关于新国标强制电动车应内置北斗定位模块的规定有哪些?附北斗定位芯片对比参数

关于新国标要求电动自行车内置的北斗定位功能,需要符合以下几点: 支持UART或SPI接口至少支持接收处理北斗B1C和B2a信号具备定位信息的采集、存储和发送功能(其中定位信息包括:经度、纬度、速度、定位时间)具备采集、存…

1.项目初始化

目录 1.相关联的数据库表 2.使用gorm操作数据库 使用gen生成model和对数据库的操作 3.使用viper进行配置管理 读取配置文件 进行热更新 4.使用Pflag来进行命令行参数解析 5.使用日志slog 日志轮转与切割功能 6.错误码和http返回格式标准化 提供错误码 提供错误类型…

Leetcode—1115. 交替打印 FooBar【中等】(多线程)

2024每日刷题(180) Leetcode—1115. 交替打印 FooBar C实现代码 class FooBar { private:int n;sem_t fooSem;sem_t barSem;public:FooBar(int n) {this->n n;sem_init(&fooSem, 0, 1);sem_init(&barSem, 0, 0);}~FooBar() {sem_destroy(&…

免杀对抗—内存加载UUID标识IPV4地址MAC地址

前言 试想我们开辟一块内存,然后直接将shellcode写入到对应的内存中并且该内存是可读可写可执行的状态,那么这种方式太容易被AV所查杀,因此当我们如果是利用Windows自身提供的API来将加密或者封装好的shellcode写入到内存执行的话,将会大大增加查杀的难度。 参考文章&#xf…

Linux的pinctrl和gpio子系统

上一章我们编写了基于设备树的 LED 驱动,但是驱动的本质还是没变,都是配置 LED 灯所使用的 GPIO 寄存器,驱动开发方式中硬件初始化这一部分和裸机基本没啥区别。Linux 是一个庞大而完善的系统,尤其是驱动框架,像 GPIO …

Stm32+Esp8266连接阿里云程序移植教程(MQTT协议)

Stm32Esp8266连接阿里云程序移植教程(MQTT协议) 一、前期准备二、移植过程三、程序的使用3.1 连接上阿里云3.2 传输用户数据到阿里云3.3 解析从阿里云下发给用户的数据3.4 关于调试接口 一、前期准备 自己要的工程文件移植所需的文件(如下图&…

新手必看!手把手教你打造10W+爆款文章

自定义 GPTs 的引入彻底改变了博主、营销人员和内容创作者在 ChatGPT 高级版本中的写作方式。这些自定义 GPTs 提供个性化的 AI 工具,旨在执行特定任务,使写作过程更顺畅、迅速且高效。从主题头脑风暴到撰写 SEO 友好的内容,自定义 GPTs 满足…

ES6扩展运算符

1.介绍: ... 扩展运算符能将数组转换为逗号分隔的参数序列; 扩展运算符(spread)也是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的 参数序列,对数组进…

方波信号发生器(完整SCL源代码)

正弦和余弦信号发生器请参考下面文章链接: 1、博途PLC平台 PLC信号发生器(博途SCL)_博图软件波形发生器怎么用-CSDN博客文章浏览阅读1.1k次。本文介绍了如何使用博途SCL编程实现不同周期和幅值的信号发生器,包括余弦和正弦信号。通过信号发生器,可以用于验证PLC的滤波器效…

Android Framework AMS(06)startActivity分析-3(补充:onPause和onStop相关流程解读)

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读AMS通过startActivity启动Activity的整个流程的补充,更新了startActivity流程分析部分。 一般来说,有Activ…

ZBrush入门使用介绍——17、FiberMesh

大家好,我是阿赵。   继续介绍ZBrush的使用。这次来看看FiberMesh功能。这是一个可以模仿毛发的功能。 一、 使用FiberMesh的预览功能 先准备一个模型,并生成多边形网格 然后按着Ctrl,在模型的表面画一个遮罩。 找到FiberMesh功能&#…

JSP 的 response 和 session 内置对象

文章目录 前言一、response 内置对象 1.重定向网页2.处理 HTTP 文件头3.设置输出缓存二、session 内置对象 1.创建及获取客户会话2.会话中移动指定的绑定对象3.销毁 session 内置对象4.会话超时的管理5. session 对象的应用总结 前言 JSP 的 response 和 session 内置对像&…

HCIP——以太网交换安全(四)DHCP Snooping

目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述: ①DHCP Snooping使能DHCP的一种安全特性,用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…

uniapp 省、市、区、乡镇 数据层级选择插件 Ba-DataPicker

Ba-DataPicker 是一款uniapp数据层级选择弹窗插件。支持省市区乡四级;支持自定义数据。 支持省、市、区、乡镇四级支持自定义数据支持字母检索 截图展示 支持定制、本地包、源码等,有建议和需要,请点击文章结尾“Uniapp插件开发”联系我&am…

Flink有状态计算

前言 状态是什么?状态就是数据,准确点说,状态是指 Flink 作业计算时依赖的历史数据或中间数据。如果一个 Flink 作业计算依赖状态,那它就是有状态计算的作业,反之就是无状态计算的作业。 举个例子,服务端…