当前位置: 首页 > news >正文

Python(白银时代)——模块、包、异常

异常

概念

  • 程序运行时,如果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同款,欢迎关注! 

相关文章:

  • 网络安全专家最爱用的9大工具
  • 处理机调度典型调度算法
  • HBase客户端、服务器端、列簇设计、HDFS相关优化,HBase写性能优化切入点,写异常问题检查点
  • 技术方案开发——红外测温仪方案
  • Chat GPT介绍
  • 探索Python编程语言:创新技术与应用领域
  • AC笔记 | Leetcode 0394 —— 辅助栈
  • Idea常用快捷键设置
  • 5.springcloud微服务架构搭建 之 《springboot集成Hystrix》
  • 【历史上的今天】2 月 28 日:阿帕网退役;Quintus 收购 Mustang;同步电流磁芯存储器获得专利
  • Java开发 - MybatisPlus初体验
  • Pytorch模型转TensorRT步骤
  • 【K8S系列】深入解析无状态服务
  • Unity设计模式—服务定位器模式
  • http如何构造请求?
  • Akka系列(七):Actor持久化之Akka persistence
  • co模块的前端实现
  • fetch 从初识到应用
  • java取消线程实例
  • java中的hashCode
  • Just for fun——迅速写完快速排序
  • miaov-React 最佳入门
  • October CMS - 快速入门 9 Images And Galleries
  • Rancher如何对接Ceph-RBD块存储
  • session共享问题解决方案
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 阿里云Kubernetes容器服务上体验Knative
  • 阿里云应用高可用服务公测发布
  • 反思总结然后整装待发
  • 记一次和乔布斯合作最难忘的经历
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 如何实现 font-size 的响应式
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​如何在iOS手机上查看应用日志
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ./configure、make、make install 命令
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • @FeignClient注解,fallback和fallbackFactory
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [IDF]被改错的密码
  • [IE9] IE9 RC版下载链接
  • [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
  • [NISACTF 2022]sign-ezc++
  • [NOSQL] Redis介绍
  • [PHP源码阅读]empty和isset函数
  • [POJ2446] Chessboard(二分图最大匹配-匈牙利算法)