一、了解异常
定义:当python运行检测到错误时,会无法继续执行,这就称为异常,也成为报错(bug)。
二、异常的捕获方法
定义:当出现异常时,可以不管,那么程序会停止执行,也可以对BUG进行提醒,整个程序继续运行,捕获异常的作用是提前假设某处会出现异常,做好提前准备,当真的出现异常时,可以有后续手段。
2.1 基本捕获的语法
try:
可能发生异常的代码
except:
如果出现异常执行的代码
举例:打开不存在的文件,然后换一种方式打开文件
try:
f = open('D:/ActivationInfo.txt','r')
except:
print("出现异常了,文件不存在,改为w模式去打开")
f = open('D:/ActivationInfo.txt','w')
2.2 捕获指定的异常
例如:指定捕获NameError异常
语法:
try:
print(name)
except NameError as e:
print(‘name变量名称定义错误’)
其中,e中存着具体异常信息。
还有其他类型的异常,可以通过python报错提醒获取异常类型名称。
2.3 捕获多个异常
语法:
try:
print(name)
except (NameError,ZeroDivisionError) as e:
print(‘出现异常了’)
2.4 捕获全部异常
语法:
try:
print(name)
except Exception as e:
print(‘出现异常了’)
2.5 异常的else(可选)
定义:指的是没有异常时执行的代码。
语法:
try:
print(1)
except Exception as e:
print(e)
else:
print('没有异常')
2.6 异常的finally(可选)
定义:表示无论是否异常都要执行的代码,例如关闭文件。
语法:
try:
f = open('test,txt', 'r')
except Exception as e:
f = open('test,txt', 'w')
else:
print('没有异常')
finally:
f.close( )
三、异常的传递
四、python模块
定义:python的模块(Module),是一个python文件,以.py结尾,模块可以定义函数,类,变量,也可以含可执行的代码。
作用:每一个模块可以帮助我们快速实现一些功能,可以把一些相同或相关功能的代码放入同一个模块中,可以直接导入该模块到工程中使用。
4.1 模块的导入(import)
语法:
[from 模块名] import [模块 | 类 | 变量 | 函数 | * ] [as 别名 ]
其中,* 表示导入模块的全部内容,[ ]内的是可选参数。
举例:调用python中自带的time模块,并使用里面的sleep延时函数。
1. 基本用法:
import time
print(1)
time.sleep(5)
print(2)
2. 导入一个/多个功能:
此时time里其它功能都用不了。
from time import sleep,...
print(1)
sleep(5)
print(2)
3. 导入所有功能:
和基本用法相比,只是调用函数的写法不同。
from time import *
print(1)
sleep(5)
print(2)
4. 导入后改名:
有的模块名字或者需要用到的功能名字太长,不方便调用,则可以as给它改名。
import time as t
print(1)
t.sleep(5)
print(2)
from time import sleep as sl
print(1)
sl(5)
print(2)
4.2 自定义模块
1. 指定自定义模块:只需要新建一个python文件,并定义一些相关函数即可。需要用到该模块时,就按上述方法导入调用即可。
2. 导入不同模块的同名功能时,调用的时候使用的是放在最后面的模块里的功能。
4.3 __main__变量的使用
在导入自定义模块的同时,本质上已经把该自定义模块执行了,所以如果自定义模块里有执行语句,在调用时就会被执行。如果不想在被导入的时候把自定义模块里面的测试语句执行,可以使用__main__变量。
用法:
def test(x,y):
return x+y
if __name__ == '__main__':
test(1,3)
把执行代码放进if __name__ == '__main__':语句里,就只有在该模块界面右键执行时会执行该语句,在别的模块导入就不会执行该语句。
4.4 __all__变量的使用(适用于* 的使用)
如果一个模块中有‘__all__’变量(存着一个函数名列表),当使用 from xxx import * 导入时,只能导入这个列表中的元素。
用法:
__all__ = ['test_A']
def test_A():
print("test_A")
def test_B():
print("test_B")
在用 * 导入该模块的所有功能时,只能使用test_A函数。
五、python包
5.1 自定义包
定义:当python模块非常多的时候需要管理模块,包可以帮助管理,相当于是比模块更大的一个层次。
用法:在工程文件出鼠标右键创建一个包,里面需要包含__init__.py文件。
导入包里的模块用法:
### 创建一个包,并导入包内的模块
from my_package import my_test # 从my_package包中导入my_test模块
my_test.add1(1,2)
from my_package.my_test import add1 # 从my_package包的my_test模块中导入add1功能
add1(2,3)
注意:
1. __init__.py文件可以什么都不写,但必须存在这个文件,才能表示这个文件夹是个python包。
2. python包和目录的区别:目录是不能被导入或者包含其它的模块和嵌套包的,只是起到一个普通的文件夹的作用。