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

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

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

2)异常的捕获方法

捕获常规异常:

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

捕获指定异常:

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

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

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

捕获多个异常:

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

捕获所有异常:

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

捕获所有异常的else和finally:

python 复制代码
try:
    1/0
except Exception as e:
    print("出现异常")
else:
    print("无异常")
​
finally:
    print("有无异常,都要执行到finally")
3)异常的传递
python 复制代码
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 结尾. 模块能定义函数,类和变量,模块里也能包含可执行的代码.

语法:

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

import 模块名

语法:

python 复制代码
import 模块名
import 模块名1 模块名2
​
模块名.功能名()
python 复制代码
# 使用import导入time模块使用sleep功能(函数)
import time  # 导入python内置的time模块(time.py这个代码文件)
print("你好")
time.sleep(5)
print("我好")
python 复制代码
# 使用from导入time的sleep功能函数
from time import sleep
print("你好")
sleep(5)
print("我好")
python 复制代码
# 使用 * 导入time模块的全部功能
from time import *
print("你好")
sleep(5)
print("我好")
python 复制代码
# 使用as给特定的功能加上别名
# import time as t
# print("你好")
# t.sleep(5)
# print("我好")
from time import sleep as sl
print("你好")
sl(5)
print("我好")
复制代码

导入自定义模块:

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

导入自定义模块使用

test_mode1.py

python 复制代码
def add_num(x, y):
    print(x + y)

自定义模块

python 复制代码
from test_mode1 import add_num
add_num(15, 7)
python 复制代码
结果:22

导入不同模块的同名功能

test_mode1.py

python 复制代码
def add_num(x, y):
    print(x + y)

test_mode2.py

python 复制代码
def add_num(x, y):
    print(x - y)

自定义模块

python 复制代码
from test_mode1 import add_num
from test_mode2 import add_num
add_num(15, 7)
python 复制代码
结果: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

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

my_module2.py

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

包.py

python 复制代码
# 创建一个包
# 导入自定义的包中的模块,并使用
# 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()
python 复制代码
__init__.py的内容:
__all__ = ['my_module1']
​
​
# 通过__all__变量,控制import
from my_package import *
my_module1.info_print1()

总结:

  • 什么是Python的包?

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

  • init.py文件的作用?

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

  • all变量的作用?

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

6)安装第三方包

方法1:

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

方法2:

等待自动下载完成即可。

方法3:

python 复制代码
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

python 复制代码
"""
    字符串相关的工具模块
​
    - 函数: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

python 复制代码
"""
    文件处理相关的工具模块
​
    - 函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
    - 函数:append_to_file(file_name, data),接收文件路径以及传入数据,将数据追加写入到文件中
"""
​
def print_file_info(file_name):
    """
    将给定路径的文件内容打印到控制台上
    :param file_name: 即将读取文件的路径
    :return:None
    """
    f = None
    try:
        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,如果有任何内容,就是True
            f.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", "你好")
复制代码
主调用包:
python 复制代码
# 创建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!")
相关推荐
Monly212 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu3 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee20213 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
7yewh5 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
Dontla7 分钟前
vscode怎么设置anaconda python解释器(anaconda解释器、vscode解释器)
ide·vscode·python
waicsdn_haha17 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
_WndProc19 分钟前
C++ 日志输出
开发语言·c++·算法
qq_4335545428 分钟前
C++ 面向对象编程:+号运算符重载,左移运算符重载
开发语言·c++
qq_529025291 小时前
Torch.gather
python·深度学习·机器学习
数据小爬虫@1 小时前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python