目录
一、python的异常、模块与包
1、了解异常
当程序检测到一个错误,python解释器就无法继续执行,则会提示一些错误信息,这就是异常。
程序运行过程中,不能直接将异常信息返回给用户,所有需要捕获异常
当访问一个不存在的文件时,会提示如图的异常信息
2、异常的捕获方法
a、捕获基本异常
写法一:
try:
可能发生错误的代码
except:
出现异常显示的代码
else: #else这部分可省略
没有异常时想继续执行的代码
finally: #finally这部分可省略
无论是否有异常都要执行
写法二:
try:
可能发生错误的代码
except Exception as e:
出现异常显示的代码
#捕获程序异常
try:
f = open('C:/Users/HLY/Desktop/noFile.txt','r',encoding='utf-8')
except:
print("文件打开异常")
结果:
文件打开异常
b、捕获指定异常
try:
可能发生错误的代码
except 异常名 as e:
出现异常显示的代码
#捕获文件不存在的异常
try:
f = open('C:/Users/HLY/Desktop/noFile.txt','r',encoding='utf-8')
except FileNotFoundError as e:
print("文件不存在")
print(e)
结果为:
文件不存在
[Errno 2] No such file or directory: 'C:/Users/HLY/Desktop/noFile.txt'
c、捕获多个异常
写法一:
try:
可能发生错误的代码
except (异常名1,异常名2...) as e:
出现异常显示的代码
写法二:
try:
可能发生错误的代码
except 异常名1 as e:
出现异常显示的代码
except 异常名2 as e:
出现异常显示的代码
...
d、捕获异常后的finally
如果捕获异常后,try模块中的程序不会执行错误信息之后的代码,如果想要不管程序是否报错都要执行,则后面加finally
try:
可能发生错误的代码
except:
出现异常显示的代码
finally:
无论是否有异常都要执行的内容
#打开文件后必须要关闭文件
try:
f = open('C:/Users/HLY/Desktop/noFile.txt','r',encoding='utf-8')
except FileNotFoundError as e:
#文件如果不存在则创建文件
print("文件不存在")
f = open('C:/Users/HLY/Desktop/noFile.txt', 'w', encoding='utf-8')
finally:
print("我也执行啦!")
#关闭文件资源
f.close()
结果:
文件不存在
我也执行啦!
3、异常的传递
- 当多个函数之间调用时,如果底层函数未捕获异常,则会传递到上层函数,一直到有捕获异常的函数处抛出指定的信息
- 如果所有函数都没有捕获异常,则程序会输出报错信息
- 所以,如果多个函数之间调用时,要捕获异常最简单的方式只需要在最上层的函数捕获异常即可
4、python模块
a、定义
- python模块是一个python文件,以.py结尾,模块能定义函数,类和变量,也能包含可执行的代码
- 可以导入模块后,直接用其中已经定义好的函数
- 如果多个导入的函数名一样,后面的会将前面的覆盖
b、基础语法
[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]
[]在这里表示可选
常用的组合形式:
- import 模块名
- from 模块名 import 类
- from 模块名 import *
- import 模块名 as 别名
- from 模块名 import 功能名 as 别名
c、使用方法
导入内置模块time中的所有函数,并使用sleep()函数
#写法一
import time #导入内置的time模块
time.sleep(1000) #调用time模块中sleep函数,此种方法需要加time.才能使用sleep函数
#方法二
from time import * #导入内置的time模块所有函数
sleep(1000) #直接调用sleep函数,此种方法可直接调用sleep
导入内置模块time中的sleep()函数,并使用此函数
from time import sleep #导入内置的time模块中的sleep函数
sleep(1000) #调用time模块中sleep函数
导入内置模块time中的sleep()函数,别名为t
from time import sleep as t
t(1000)
d、补充
如果模块A中定义了_ _all_ _,那么模块B以 import * 的方式引入时,只会引入_ _all_ _中定义的函数,不会引入模块A中的全部函数
# moduleA
__all__ = ['test_A']
def test_A():
print('testA')
def test_B():
print('testB')
#moduleB
from moduleA import *
#此时这里只能用test_A函数
5、python包
a、定义
- 物理层面的角度,python包就是一个文件夹,此文件夹下包含__init__.py文件和各种.py文件,包的本质依然是模块
- 文件夹下有__init__.py文件,则为python包,无此文件则为普通的文件夹
b、操作方法
- 打开Pycharm软件,选择根目录鼠标右键
- 选择New
- 选择Python Package
- 设置包名,点击enter键
- 会自动出现下图红框中的内容
c、使用方法
- 创建python包,名为module
- 新建module1.py模块,定义函数module_A
def module_A():
print("This is module A")
- 新建module2.py模块,定义函数module_B
def module_B():
print("This is module B")
- 包外面的其他模块中调用定义的函数
#写法一
import module.module1
import module.module2
module.module1.module_A()
module.module2.module_B()
#写法二
from module import module1,module2
module1.module_A()
module2.module_B()
#写法三
from module.module1 import module_A
from module.module2 import module_B
module_A()
module_B()
#写法四
#第一步:在包的__init__模块中添加__all__的配置
__all__ = ['module1','module2']
#第二步:其他模块中*号形式调用
from module import *
module1.module_A()
module2.module_B()
6、安装第三方python包
a、命令符方式安装
- 打开电脑命令提示符程序
- 方法一:电脑左下角输入“命令提示符”,选择即可
- 方法二:windows+R快捷键,输入cmd,点击确定即可
- 执行
- pip install 包名称(此种方法连接的是外网,所以速度很慢)
- pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称(此种方法连接的是国内网站,速度快一些)
# 安装第三方numpy包
#方法一
pip install numpy #此种方法连接的是外网,所以很慢
#方法二
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
b、pyCharm方式安装
- 打开pyCharm软件,右下角点击如图①的位置
- 选择interpreter Settings
- 点击如图+号
- 在输入框中输入想要安装的第三方包名,如图查询的是numpy
- 右下角Options中输入 -i https://pypi.tuna.tsinghua.edu.cn/simple
- 点击左下角的install Package
- pyCharm右下角可以看到安装进程