5Python异常处理与模块导入全指南
目录
什么是异常?
异常的捕获方法:
为什么要捕获异常?
捕获异常的语法:
异常的else和finally语法:
什么是异常?
异常就是程序运行过程中出现了错误,也就是我们常说的出bug了-。-
异常的捕获方法:
为什么要捕获异常?
在可能发生异常的地方,进行捕获。当异常出现的时候,提供解决方式,而不是任由其导致程序无法运行。
捕获异常的语法:
1.try:
可能出现异常的语句
2.except (异常) as 别名:
出现异常执行的语句
3.except Exception as 别名:
捕获所有的异常
#演示捕获异常#基本捕获语法
try:f = open('C;\\abc.txt','r',encording='utf-8')
except:print("出现异常了,因为abc文件不存在")
'''结果:出现异常了,因为abc文件不存在'''#捕获指定异常:
try:print(name)
except NameError as e:print(f"出现异常了,原因是{e}")
'''结果:出现异常了,原因是name 'name' is not defined'''如果出现了其他类型异常,则不能捕获,例如:
try:f = open('C;\\abc.txt','r',encording='utf-8')
except NameError as e:print(f"出现异常了,原因是{e}")
'''
Traceback (most recent call last):File "D:\opython工程\go-learn\5.7.py", line 1143, in <module>f = open('C;\\abc.txt','r',encording='utf-8')
TypeError: 'encording' is an invalid keyword argument for open()
''' #捕获多个异常
try:1/0print(name)
except (NameError,ZeroDivisionError) as e:print(f"出现异常了,原因是{e}")
#未正确设置捕获异常类型,将无法捕获异常#捕获所有异常
try:1/0print(name)
except Exception as e:print(f"出现异常了,原因是{e}")
'''结果:出现异常了,原因是division by zero'''
异常的else和finally语法:
else:
没出现异常执行的语句
finally:
不管有无异常都执行后面的语句
#else在未出现异常时执行的代码
try:print(123)
except Exception as e:print(f"出现异常了,原因是{e}")
else:print("没出现异常")
'''结果
123
没出现异常
'''#无论有没有异常都执行finally后面的代码
try:print(name)
except Exception as e:print(f"出现异常了,原因是{e}")
finally:print("没出现异常")
'''结果:
出现异常了,原因是name 'name' is not defined
没出现异常
'''
异常的传递性:
在 Python 中,异常的传递性(也称为异常的传播)是指当异常在函数或方法中被触发但未被捕获时,它会自动向上(向调用栈的上层)传递,直到被捕获处理或导致程序终止。
碰到异常代码会终止
def func1():print("func1开始执行")1/0print("func1结束执行")def func2():print("func2开始执行")func1()print("func2结束执行")
def main():func2()main()
在调用函数时,仍然可以使用try和except接收异常
def func1():print("func1开始执行")1/0print("func1结束执行")def func2():print("func2开始执行")func1()print("func2结束执行")def main():try:func2()except Exception as e:print(f"出错了,原因是{e}")main()
模块的概念和导入:
什么是模块?
模块就是一个Python代码文件,内含类、函数、变量等,我们可以导入进行使用。
如何导入?
1. import 模块名 :直接导入
2.from 模块 import 功能 : 导入模块的指定功能
3.as可以指定别名
#演示Python的模块导入#使用import导入time模块使用sleep功能(函数)
import time
print("吃了吗")
time.sleep(3)
print("吃了")#使用from导入time的sleep功能(函数)
from time import sleep
print("吃了吗")
sleep(3)
print("吃了")#使用*导入time模块的全部功能
from time import *
print("吃了吗")
sleep(3)
print("吃了")
print(localtime())#使用as给模块改名
import time as f
print("吃了吗")
f.sleep(3)
print("吃了")#使用as给模块的特定功能改名
from time import sleep as sl
print("吃了吗")
sl(3)
print("吃了")
自定义python包:
什么是Python的包?
包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。
如何自定义:
1:创建一个package包
2:创建一个python文件
3:在此文件中编写函数功能
4:可以像调用模块的那样调用mod1中的函数
import mypackage.mod1
或者
from mypackage.mod1 import ppp
ppp()#结果是123
all 变量的作用
同模块中学习到的是一个作用,控制 import*能够导入的内容
在_init_文件中定义all变量,可以控制 import*能够导入的内容,只有all变量中的函数可以被导入
如何导入第三方pyhton包:
安装成功后可以import导入使用
方法一:使用cmd命令提示符
格式:
pip install 包名
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名 :从国内镜像站下载速度更快
方法二:pycharm中安装包
综合案例:
------------------这是str_util.py的代码-----------------------------------def str_reserve(s):s=input("请输入一个字符串\n")s=s[::-1]print(f"这个字符串反转后是:\n{s}")def str_sub():s = input("请输入一个字符串\n")x=int(input("请输入起始下标\n"))y=int(input("请输入终止下标\n"))s_sub=s[x:y]print(s_sub)------------------这是file_util.py的代码-----------------------------------def print_file_info():name=input("请输入文件名\n")f= Nonetry:f=open(f"{name}",'r',encoding='utf-8')print(f)except:print("出现异常了,因为文件不存在\n")finally:if f is not None:f.close()def append_to_file():f = Nonename = input("请输入文件名\n")try:f = open(f"{name}", 'a', encoding='utf-8')data = input("请输入追加内容\n")f.write(f"{data}\n")except:print("出现异常了,因为文件不存在\n")finally:if f is not None:f.close()------------------这是代码调用测试-----------------------------------import mypackage.str_util
import mypackage.file_utilstr_sub()
str_reserve()print_file_info()
append_to_file()
这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!