1.异常
什么是异常:
当检测到一个错误时,python解释器就无法继续执行,反而出现了一个错误提示,这就是所谓的“异常”,也就是bug
2.捕获异常
1.为什么要捕获异常
没有完美的查询,任何程序在运行的过程中,都有可能存在bug,我们不能保证写出没有bug的代码而是在力所能及的范围内,对可能出现的bug,进行提前准备,提前处理.这种行为叫捕获异常。
2.对bug的处理
方式1:不处理,程序报错终止
方式2:对bug提示,程序继续运行。
方式3.基本形式:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
如:
try:
open('ab.txt', 'r', encoding='utf-8')
except:
open('ab.txt', 'w', encoding='utf-8')
意义为:以只读的方式打开文件,如果不存在 ab.txt文件,则出现异常执行以写入的方式打开文件,因为,以写入的方式,即使文件不存在,也会创建一个新文件。
注:可以捕获所有异常
4.捕获指定异常
形式:
try:
可能发生错误的代码
except 指定错误:
如果出现异常执行的代码
如:
try:
# print(name)
1/0
except NameError as e:
print("名字未定义就使用")
结果是:ZeroDivisionError: division by zero
注:仍然要报错,这就是捕获指定异常 该except只能捕获NameError 的异常
注:其中的e就是异常的具体信息,如NameError 中的e信息为name ‘name’ is not defined
5.捕获多个异常
形式:
try:
可能发生错误的代码
except (指定错误1,指定错误2....):
如果出现异常执行的代码
如:
try:
print(name)
1 / 0
except (NameError, ZeroDivisionError) as e:
print(e)
6.捕获所有异常
形式:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
# 或者
try:
可能发生错误的代码
except Exception as e:
如果出现异常执行的代码
注:一般使用第二种异常,第二种异常又叫顶级异常。
7.异常else
形式:
try:
可能发生错误的代码
except Exception as e:
如果出现异常执行的代码
else:
如果没有出现异常执行的代码
注:else是可选的,可以写也可以不写。
8.异常的finally
形式:
try:
可能发生错误的代码
except Exception as e:
如果出现异常执行的代码
else:
如果没有出现异常执行的代码
finally:
无论是否出现异常都要执行的代码
注:finally是可选的,可以写也可以不写。
异常的传递
意义:捕获异常并不需要去捕获最底层的异常,由于异常的传递我们可以在顶层直接捕获
注:异常具有传递性
如:
def func1():
num=1/0
print("func1")
def func2():
func1()
print("func2")
注:很明显func1产生了除数为0的错误,但是在未调用func1时程序并未发生错误,而调用了func2后 异常的传递发生报错。
python的模块
1.什么是python的模块
是一个python文件 以.py结尾, 包含了函数 类 变量等 ,我们可以通过导入的方式去使用模块中包含的内容
2.模块的导入
形式: [from 模块名] import [模块名|类|变量|函数|*] [as 别名]
注:[ ] 的内容是可选的
# 常用的形式如:
import 模块名
from 模块名 import 类、变量、方式等
from 模块名 import *
from 模块名 import 功能名 as 别名
import 模块名 as 别名
3.模块的使用
1. 如:
import time
注:导入python的内置模块time.py
time.sleep(时间)
注:调用的方式是 模块.方法(参数) 其中的点 代表着层级
2. 如果我们只想使用模块中每一功能
# 通过from导入time的sleep方法
from time import sleep
print("程序开始")
# 调用sleep方法 作用 暂停
sleep(5)
print("程序结束")
注:我们直接导入sleep方法 所以我们使用时就不能用time.sleep()的方式
3. 如果我们想使用模块中全部功能
# 通过from导入time全部功能
from time import *
print("程序开始")
# 调用sleep方法 作用 暂停
sleep(5)
print("程序结束")
4.给导入的模块取别名
import time as t
print("程序开始")
# 调用sleep方法 作用 暂停
t.sleep(5)
time.sleep(5)
print("程序结束")
注:取别名并不是只能用别名
自定义模块
注:和模块的使用是完全一样,唯一的区别在于,一个是python库里面的一个是自己写的,在同一文件下。
注:如果我们导入模块功能时,发现两个功能名一样的话,后出现的会覆盖先出现的
main 变量
#形式:
if name == 'main':
代码块
作用是当代码块是测试调用功能的代码,在我们导入该功能时在原模块测试功能的代码也执行,为了保留测试代码,我们引入了main变量 该变量的使用是 当你执行原模块的测试时 name变成main if为true执行测试,但是当你导入功能name不变则不执行测试代码。
all 变量
# 形式:
# 模块
all=['add']
def add(x, y):
print(x + y)
def div(x,y):
print(x - y)
# 执行程序
from Test1 import *
add(1,2)
div(1,2)
注:当我们import*时 我们导入的功能只能使用all包含的功能 即add方法可用,div不可用
python包
1. 什么python包
从物理上看 python包就是一个存在_init_.py文件的文件夹,包含着.py文件
注:和模块的导入基本一样,区别在于__all__变量在_init_.py 文件内写 而不是在模块中写
注:init.py是必须存在的
2.安装第三方包
1.什么是第三方包
包是由第三方个人或团队开发出来的,免费供所有人使用,Node.js 中的包都是免费且开源的,不需要付费即可免费下载使用
2. 安装第三方包 pip
步骤:
1.打开命令提示符(win+r)
2.输入 pip install 要安装的第三方包名
注:为什么pip默认链接的网络是外国的所以下载网速较慢
所以我们可以通过:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 要安装的第三方包名
或者
通过pycharm直接安装