Python异常,模块与包
文章目录
- 1.Python异常
- 1.1 异常的捕获方法
- 1.2 异常的else方法
- 1.3 异常的finally方法
- 1.4 异常的传递
- 2.Python模块
- 2.1 Python模块的导入
- 2.2 自定义模块
- 3.Python包
- 3.1 Python自定义包
- 3.1.1 导入包
- 3.2 第三方包
- 3.2.1 安装第三方包
1.Python异常
当检测到错误时,Python解释器就无法继续执行,反而出现了一些错误提示,叫做异常。
1.1 异常的捕获方法
捕获异常的作用:提前假设某处会出现异常,做好提前准备,当真正出现异常的时候,有后续的手段。
- 捕获异常的基本操作
语法:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
try:f = open("C:/Users/86183/Desktop/python assignment/marl_framework/bill.txt","r")
except:print("出现异常,文件不存在")
- 捕获指定的异常
语法:
try:
print(name)
except NameError as e:
print('name变量名称未定义错误‘)
try:print(name)
except NameError as e:print("出现了变量未定义的异常")
- 捕获多个异常
语法:
try:
print(1/0)
except (NameError,ZeroDivisionError):
print(‘ZeroDivision错误…’)
try:print(name)
except (NameError,ZeroDivisionError) as e:print("出现了变量未定义的异常或者除以0的异常错误")
- 捕获所有异常
语法:
try:
… …
except Exception as e:
print("出现异常了“)
try:1/0
except Exception as e:print("出现异常")
1.2 异常的else方法
else表示没有异常时执行的代码。
语法:
try:
print(1)
except Exception as e:
print(e)
else:
print('程序没发生异常’)
try:print('你好')
except Exception as e:print("出现异常")
else:print('No Error')
1.3 异常的finally方法
无论如何都要执行的操作。
语法:
try:
print(1)
except Exception as e:
print(e)
else:
print('程序没发生异常’)
finally:
f.close()
try:f = open("D:/123.txt","r")
except Exception as e:print("出现异常")f = open("D:/123.txt", "w")
else:print('No Error')
finally:f.close()
1.4 异常的传递
在多个函数中捕获异常,当所有函数都没有捕获到异常的时候,程序就会报错。
def func1():print("func1 开始执行")num = 1/0print("func1 结束执行")def func2():print("func2 开始执行")func1()print("func2 结束执行")def main():try:func2()except Exception as e:print(f"出现异常,异常信息是{e}")main()
2.Python模块
2.1 Python模块的导入
Python模块是一个Python的文件,以.py结尾,模块能定义函数,类和变量等。
语法:
[from 模块名] import [模块|类|变量|函数|*] [as 别名]
- import模块名
导入一个模块。
语法:
import 模块名
import 模块名1,模块名2
模块名.功能名()
import timetime.sleep(200)
- from 模块名 import 功能名
使用import导入某个模块的某个功能。
语法:
from 模块名 import 功能名
功能名()
from time import sleepsleep(2)
- from 模块名 import *
使用from导入模块中的全部功能
语法:
from 模块名 import *
功能名()
from time import *sleep(2)
- as 别名定义
语法:
- 模块定义别名
import 模块名 as 别名- 功能定义别名
from 模块名 import 功能 as 别名
import time as tt.sleep(2)
from time import sleep as ss(2)
2.2 自定义模块
自己定义一个模块,然后进行引用。
当导入多个模块时,且模块内有同名功能,当调用这个功能时,调用的是后面导入模块的功能。
- _main_变量
这条语句可以保证在自己写的模块内部调用函数程序,并进行执行。而外部模块调用该模块时,不会执行该模块内部的调用函数操作。
if __name__ == '__main__':
- _all_变量
如果一个模块中有_all_变量,当使用from xxx import *导入时,只能导入这个列表中的元素。
3.Python包
包就是一个文件夹,在该文件夹下包含一个_init_.py文件,该文件可用于包含多个模块文件。包的本质依然是模块。
3.1 Python自定义包
步骤:
- 新建包my_package
- 新建包内模块:my_module1和my_module2
- 模块内代码如下:
3.1.1 导入包
- 方式1:
import 包名.模块名
包名.模块名.目标
import my_package.my_module1
import my_package.my_module2my_package.my_module1.my_function1()
my_package.my_module2.my_function2()
from my_package import my_module1
from my_package import my_module2my_module1.my_function1()
my_module2.my_function2()
- 方式2:
from 包名 import *
模块名.目标
必须在_init_.py文件中添加_all_ = [],控制允许导入的模块列表
3.2 第三方包
3.2.1 安装第三方包
在命令提示符程序中输入:pip install 包名称
若上述指令安装太慢,可以用如下指令:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
练习:
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("Python"))print(substr("Python",1,3))
def print_file_info(file_name):"""功能是将给定的文件内容输出到控制台中:param file_name: 即将读取的文件路径:return: None"""global ftry:f = open(file_name, 'r')content = f.read()print(f"文件的全部内容如下:{content}")except Exception as e:print(f"程序出现异常,原因是{e}")finally:f.close()def append_to_file(file_name, data):"""功能是将指定的数据追加到指定的文件中:param file_name:指定的文件路径:param data:要追加写入的数据:return:None"""global ftry:f = open(file_name, 'a')f.write(data)except Exception as e:print(f"程序出现异常,原因是{e}")finally:f.close()if __name__ == '__main__':print_file_info('C:/Users/86183/Desktop/python assignment/marl_framework/bill.txt')append_to_file('C:/Users/86183/Desktop/python assignment/marl_framework/bill.txt','\n你好')
import my_utils.str_util
import my_utils.file_utilprint(my_utils.str_util.str_reverse("Python"))
print(my_utils.str_util.substr("Python",1,3))print_file_info('C:/Users/86183/Desktop/python assignment/marl_framework/bill.txt')
append_to_file('C:/Users/86183/Desktop/python assignment/marl_framework/bill.txt', '\n你好')