当检测到一个错误时,python解释器就无法继续执行了,出现一些错误的提示,这就是异常。
当程序遇到bug,可能整个程序因为bug停止运行;也可能对bug进行提醒,整个程序继续运行。
捕获异常的作用:提前假设某处会出现异常,做好准备,当真正出现异常的时候采取后续手段。
基本语法:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
例如:尝试以’r’模式打开文件,如果文件不存在,则以’w’方式打开
try:
f=open('linux.txt','r')
except:
f=open('linux.txt','w')
打印异常的具体信息
try:
print(name)
except NameError as e:
print(e)
可以把要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写。
try:
print(1/0)
except(NameError,ZeroDivisionError):
print('ZeroDivision错误')
try:
except Exception as e:
print('出现异常')
finally表示的是无论是否异常都要执行的代码,例如关闭文件。
try:
f=open('test.txt','r')
except Exception as e:
f=open('test.txt','w')
else:
print('没有异常')
finally:
f.close()
异常具有传递性。当函数func1中发生异常,并且没有捕获处理这个异常的时候,异常会传毒到函数func2,当func2也没有捕获这个异常的时候,main函数会捕获这个异常。当所有函数都没有捕获异常的时候,程序就会报错。
python模块,是一个python文件,以.py结尾,模块能定义函数、类和变量,也能包含可执行的代码。
模块的作用:python中的每一个模块可以快速实现一些功能,比如实现和时间相关的功能就可以使用time模块。可以认为一个模块就是一个工具包。
模块在使用前需要先导入,语法:[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]
常用的组合形式:
import 模块名
from 模块 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名 # 设置模块别名
from 模块名 import 功能名 as 别名 # 设置功能别名
例如:导入time模块
# 导入时间模块
import time
print("开始")
time.sleep(1)
print("结束")
模块可以Ctrl+点击,进入模块查看源代码。
使用from导入time的sleep功能(函数)
from time import sleep
# from time import * 表示导入全部功能
print("开始")
sleep(5)
print("结束")
每个python文件都可以作为一个模块,模块的名字就是文件的名字。
# 新建python文件my_moudle1.py
def test(a, b):
print(a + b)
# 新文件
import my_moudle1
my_moudle1.test(10, 20)
注意:当导入多个模块的时候,且模块内有同名功能,调用到的是后导入的模块的功能
在模块内部输入main,会出现if __name__ == '__main__';
,在内部加上测试,只有当程序直接执行才会进入if内部,否则无法进入。可以正常测试模块功能,但是在调用时不会显示测试内容。
如果一个模块文件中有'__all__'
变量,它的值是一个列表。当使用import *
时,只能导入这个列表中的元素。