异常
概念
-
程序运行时,如果Python 解释器遇到了错误,会停止程序运行,并且提示错误信息,这就是异常
-
程序停止执行并提示错误信息的动作,称为 抛出异常
异常捕获
-
try: 里面的代码,不确定是否能够正常执行.
-
except: 当try里面的代码出现错误时,程序会跳到except 里执行
-
对某些代码的执行不确定是否正确,可以使用 try: except 来捕获并处理异常
语法
try:
尝试执行代码
except:
出现错误的处理
错误类型
-
在Python中,程序执行时可能会遇到 不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这时就需要捕获异常类型了
-
当 Python解释器 抛出异常时,最后一行错误信息的第一个单词,就是错误类型
-
如果希望 无论出现任何错误,都不会因为 Python 解释器 抛出异常而被终止,可以用 except Exception
语法
try:
尝试执行的代码
except 错误类型1:
针对错误类型1,对应的处理代码
except (错误类型2,错误类型3):
针对错误类型2和3,对应的处理代码
except Exception as e:
未知错误处理
示例
try:
# 除零异常 案例
# num=10/0
# 其它异常
ss=int("df")
except ZeroDivisionError:
print("这是除0异常")
except Exception as e:
print("未知异常:",e)
输出结果
异常的传递
-
当函数/方法 执行出现异常,会将异常传递给 函数/方法 的调用一方
-
如果 传递到主程序 ,仍然 没有异常处理,程序才会被终止
主动抛出异常
-
在开发中,除了 代码执行出错 Python 解释器 抛出异常之外,还可以根据 应用程序特有的业务需求,主动抛出异常
-
Python 中提供了一个 Exception 异常类
-
如果想要主动抛出异常
-
创建一个 Exception 的对象
-
使用 raise 关键字抛出异常
-
示例
def input_pwd(pwdd):
""" 校验密码,密码长度只能是6位 """
if len(pwdd)!=6:
ex=Exception("主动抛出异常:密码长度不符合规定!!")
raise ex
print("你输入的密码是:%s" %pwdd)
try:
input_pwd("2332323232")
except Exception as e:
print(e)
输出结果
模块
概念
-
模块是 Python 程序架构的一个核心概念
-
每一个以扩展名 py 结尾的 Ptyon 源代码文件都是一个 模块
-
模块名 同样也是一个标识符,需要符合标识符的命名规则
-
在模块中定义的 全局变量、函数、类 都是提供给外面直接使用的工具
-
模块 就好比是工具包,要想使用这个工具包中的工具,就需要先导入这个模块
import 导入示例
# 方式一
import 模块名1,模块名2
# 方式二
import 模块名1
import 模块名2
# 方式三,导入后使用别名
import 模块1 as 模块别名
导入后,通过模块名. 使用 模块提供的工具(全局变量、函数、类)
from... import 导入
-
如果希望 从某一个模块 中,导入 部分 工具,就可以使用 from ... import 的方式
-
import 模块名 是一次性 把模块中 所有工具全部导入,并且通过 模块名/别名 访问
-
导入后不需要通过 模块名. ,可以直接使用 模块提供的工具 ——全局变量、函数、类
-
如果 两个模块,存在同名的函数,后导入的模块会覆盖先导入的模块
-
一旦发生冲突,可以使用 as 关键字给其中一个工具起一个别名
# 从模块中导入某个工具
form 模块名1 import 工具名
# 导入所有工具(不推荐使用,出现同名工具不好查)
from 模块名 import *
示例
import random as rd
from tqdm import tqdm
num=rd.randint(0,10)
print("生成的随机数是:%d" %num)
# 生成进度条
for i in tqdm(range(10)):
pass
输出结果
原则
-
每一个文件都应该是可以被导入的
-
一个独立的 Python 文件就是一个 模块
-
在导入文件时,文件中 所有没有任何缩进的代码 都会被执行一遍
__name__ 属性
-
__name__ 可以做到,测试模块的代码 只在测试情况下运行,而在 被导入时不会执行
-
__name__ 是 Python 的一个内置属性,记录着一个字符串
-
如果被其他文件导入 __name__ 就是模块名
-
如果 是当前执行的程序 __name__ 是 __main__
示例
cal.py 文件内容
name ="张三"
def add(a,b):
return a+b
def reduce(a,b):
return a-b
print("计算结果是:%d" %add(1,2))
hello3.py 文件内容
import cal
num=cal.add(2,2)
print("num的值:%d" %num)
执行 hello3.py 的结果
如果不想执行 cal.py 模块中打印的内容,可以加 if __name__ =="__main__"
name ="张三"
def add(a,b):
return a+b
def reduce(a,b):
return a-b
if __name__ == "__main__":
print("计算结果是:%d" %add(1,2))
修改完 cal.py 后,再次执行 hello3.py 文件
包
概念
-
包 是一个包含多个模块的 特殊目录
-
目录下有个特殊文件 __init__.py
-
包名的命名方式 和变量名一致,小写字母 +_
-
优点
-
使用 import 包名,可以一次性导入包中所有模块
-
__init__.py 文件
-
要在外界使用 包 中的模块,需要在 __init__.py 中指定 对外界提供的模块列表
# 从当前目录 导入模块列表
from . import test1
from . import test2
示例
制作模块
发布模块
-
如果希望自己的模块,分享给其他人,可以按照以下步骤操作
-
创建 setup.py
from distutils.core import setup setup( name="ani",#包名 version="1.0", #版本 description="say hello模块", # 描述信息 long_description="完成的 say hello 模块", # 完事的描述信息 author="zq", # 作者 author_email="xxx@qq.com", # 作者邮箱 url="www.xxx.com", # 主页 py_modules=["ani.test1","ani.test2"] # 包中所有要分享的模块 )
-
构建模块
-
命名行输入: python setup.py build
-
-
生成发布的压缩包
-
命名行输入: python setup.py sdist
-
-
安装模块
-
解压 ani-1.0.tar.gz 压缩包
-
进入解压后的目录,命令行输入:python setup.py install
卸载模块
-
直接从安装目录下,把安装的模块 目录 删除就可以了
pip 安装第三方模块
-
pip 是一个现代的,通用的 Python 包管理工具
-
提供了对 Python 包的查找、下载、安装、卸载等功能
-
安装与制裁命令如下
-
pip install xxx
-
pip uninstall xxx
-
示例
程序猿与投资生活实录已改名为 程序猿知秋,WX同款,欢迎关注!