1)python异常
-
什么是异常:异常就是程序运行的过程中出现了错误
-
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的功能函数代码")
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!")