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/0except 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/0 print(\"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_module1import my_package.my_module2my_package.my_module1.my_function1()my_package.my_module2.my_function2()
from my_package import my_module1from 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 f try: 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 f try: 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_utilimport 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你好\')