python入门到精通 _7异常、模块与包

2023-11-18

1. 异常捕获

异常就是程序运行的过程中出现了错误-bug

世界上没有完美的程序,任何程序在运行的过程中,都有可能出现:异常,也就是出现bug
导致程序无法完美运行下去。

我们要做的,不是力求程序完美运行。
而是在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。

这种行为我们称之为:异常处理(捕获异常)

捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。

1.1 捕获常规异常

基本语法:

try:
    可能发生错误的代码
except:
    如果出现异常执行的代码

需求:尝试以r模式打开文件,如果文件不存在,则以w方式打开。

try:
    f = open('linux.txt', 'r')
except:
    f = open('linux.txt', 'w')

1.2 捕获指定异常

基本语法:

try:
    print(name)
except NameError as e:
    print('name变量名称未定义错误')
    print(e)

① 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
② 一般try下方只放一行尝试执行的代码。

在这里插入图片描述

1.3 捕获多个异常

当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。

try:
    print(name)
except Exception as e:
    print(e)

1.4 异常的finally

try:
    f = open('test.txt', 'r')
except Exception as e:
    f = open('test.txt', 'w')
else:
    print('没有异常')
finally:
    f.close()

2. 模块的导入与自定义

2.1 模块的导入

模块就是一个Python文件,里面有类、函数、变量等,我们可以
拿过来用(导入模块去使用)

基本语法:

from 模块名 import 模块名 as 名字
模块名.功能名()

常用的组合形式如:
import 模块名
from 模块名 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名

案例:导入time模块

# 导入时间模块
import time
print("开始")
# 让程序睡眠1秒(阻塞)
time.sleep(1)
print("结束")

注意事项: from可以省略,直接import即可 as别名可以省略 通过”.”来确定层级关系 模块的导入一般写在代码文件的开头位置

2.2 模块的自定义

Python中已经帮我们实现了很多的模块. 不过有时候我们需要一些个性化的模块, 这里就可以通过自定义模块实现, 也就是自己制作一个模块

建立mk模块:

def test(a, b):
    print(a + b)

# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行test函数调用
if __name__ == '__main__':
    test (1, 1)

导入模块并使用:

from mk import test
test(1, 2)

注意事项:当导入多个模块的时候,且模块内有同名功能. 当调用这个同名功能的时候,调用到的是后面导入的模块的功能

3. 安装第三方包与自定义

3.1 自定义包

从物理上看,包就是一个文件夹,在该文件夹下包含了一个 _init_.py 文件,该文件夹可用于包含多个模块文件
从逻辑上看,包的本质依然是模块

步骤如下:

① 新建包my_package
② 新建包内模块:my_module1my_module2

在这里插入图片描述

导入包:

import 包名.模块名

包名.模块名.目标

eg
在这里插入图片描述

3.2 安装第三方包

我们知道,包可以包含一堆的Python模块,而每个模块又内含许多的功能。
所以,我们可以认为:一个包,就是一堆同类型功能的集合体。

在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:
科学计算中常用的:numpy包
数据分析中常用的:pandas包
大数据计算中常用的:pyspark、apache-flink包
图形可视化常用的:matplotlib、pyecharts
人工智能常用的:tensorflow等
这些第三方的包,极大的丰富了Python的生态,提高了开发效率。
但是由于是第三方,所以Python没有内置,所以我们需要安装它们才可以导入使用.

3.2.1 cmd命令行pip命令

# 我们可以通过如下命令,让其连接国内的网站进行包的安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称

https://pypi.tuna.tsinghua.edu.cn/simple 是清华大学提供的一个网站,可供pip程序下载第三方包

3.2.2 pycharm导入

在这里插入图片描述

练习案例:自定义工具包

创建一个自定义包,名称为:my_utils (我的工具)
在包内提供2个模块
str_ytil.py (字符串相关工具,内含:)
函数:str_reverse(s),接受传入字符串,将字符串反转返回
函数:substr(s, x, y),按照下标x和y,对字符串进行切片
file_util.py(文件处理相关工具,内含:)
函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
函数:append_to_file(file_name, data),接收文件路径以及传入数据,将数据追加写入到文件中

构建出包后,尝试着用一用自己编写的工具包。

str_ytil.py

def str_reverse(s):
    return s[::-1]
def substr(s, x, y):
    return s[x:y]

# 测试
if __name__ == '__main__':
    print(str_reverse("小趴菜"))
    print(substr("小丑既然是我自己", 1, 3))

file_util.py

def print_file_info(file_name):
    f = None
    try:

        f = open("file_name", "r", encoding="utf-8")

        content = f.read()
        print(f"文件的全部内容:{content}")
    except Exception as e:
        print(f"错误为:{e}")
    finally:
        if f:
            f.close() # 关闭

def append_to_file(file_name,data):
    f = open("file_name", "a", encoding="utf-8")
    f.write(data)
    f.close()


# 测试
if __name__ == '__main__':
    print_file_info("D:\\book\\study book\\python基础\\代码\\09_异常_模块_包\\123.txt")
    append_to_file("D:\\book\\study book\\python基础\\代码\\09_异常_模块_包\\123.txt", "小趴菜")

主函数

from my_utils import file_util, str_ytil

print(str_ytil.str_reverse("小趴菜"))
print(str_ytil.substr("小丑既然是我自己", 1, 3))

file_util.print_file_info("D:\\book\\study book\\python基础\\代码\\09_异常_模块_包\\123.txt")
file_util.append_to_file("D:\\book\\study book\\python基础\\代码\\09_异常_模块_包\\123.txt", "小趴菜")

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python入门到精通 _7异常、模块与包 的相关文章

  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • windows server 2012R2 部署安装 hmail

    windows server 2012R2 部署安装 hmail 环境说明 系统 windows server2012 R2软件版本 hMailServer 5 6 7 B2425 exe 邮件客户端 foxmail7 2版本 加密工具 h
  • Python21天打卡Day20-可变参数、关键字参数

    在 Python 中 可变参数允许函数接受任意数量的参数 这些参数被封装成一个元组 Tuple 或列表 List 并作为参数传递给函数 Python 中有两种类型的可变参数 args 用于传递可变数量的位置参数 Positional Arg
  • 【Docker系列】从头学起 Docker——docker run 命令详解

    文章目录 作用 语法格式 docker run 执行流程 options 说明 实际例子 例一 例二 例三 例四 例五 例六 例七 例八 总结 例九 作用 创建一个新的容器并运行一个命令 语法格式 docker run OPTIONS IM
  • springboot项目打包(exe+jdk/jre+mysql)跨平台一键安装

    SpringBoot项目打包 exe jdk jre mysql 跨平台一键安装 1 Spring Boot将javaFX应用打包为jar包 1 1 pom xml安装Spring boot maven plugin
  • 【MyBatis-Plus】详解Wrappers.<T> lambdaQuery()以及常用过滤方法

    Wrappers
  • Java 动态代理作用是什么?

    主要用来做方法的增强 让你可以在不修改源码的情况下 增强一些方法 在方法执行前后做任何你想做的事情 甚至根本不去执行这个方法 因为在 InvocationHandler的invoke方法中 你可以直接获取正在调用方法对应的 Method对象
  • linux kernel --component组件用法

    kernel component组件用法 linux component组件架构分析
  • 如何用mac搭建本地svn服务器(如何将mac变成版本管理服务器)

    前言 一 搭建本地svn服务器 1 建立代码库 2 配置文件修改 3 启动本地svn服务 二 搭建过程中常见问题 如果Mac os升级到10 0以上 自带的svn不支持了怎么办 三 mac本地使用svn软件管理svn库 cornerston
  • Linux多进程数据交换--共享内存

    个人博客地址 https cxx001 gitee io 基础 在linux系统开发当中 时常需要在多个进程之间交换数据 在多个进程之间交换数据 有很多方法 但最高效的方法莫过于共享内存 linux共享内存是通过tmpfs这个文件系统来实现
  • 第二十八节、基于深度学习的目标检测算法的综述(附代码,并附有一些算法英文翻译文章链接))...

    在前面几节中 我们已经介绍了什么是目标检测 以及如何进行目标检测 还提及了滑动窗口 bounding box 以及IOU 非极大值抑制等概念 这里将会综述一下当前目标检测的研究成果 并对几个经典的目标检测算法进行概述 本文内容来自基于深度学
  • APK 逆向工程 - 解析 apk 基本信息和方法调用图

    导读 在 Android 开发中 我们很少使用 Android 逆向去分析 apk 文件的 但是作为一个测试人员 我们要对这个 apk 文件进行一系列的分析 审核 测试 这篇文章讲解如何解析一个 apk 文件 主要从下面几方面介绍 解析前准
  • mysql show para_mysql中show命令的详细用法

    经过我测试的语句 show procedure status 显示数据库中所有存储的存储过程基本信息 包括所属数据库 存储过 程名称 创建时间等 show create procedure sp name 显示某一个存储过程的详细信息 a
  • MongoDB安装和批量写入

    本文主要以Ubuntu系统为例 记录安装部署MongoDB社区版 并进行批量数据写入 安装部署主要依据MongoDB官网指引 数据写入脚本为个人编写 如有需要可以直接使用 1 导入包管理系统使用的公钥 wget qO https www m
  • UML中依赖和关联,关联,聚合和组合的区别

    在UML中 依赖和关联经常无法进行区分 在类图中 不知道什么时候使用依赖 什么时候使用关联 来定义两个类之间的关系 今天看了一篇帖子 对这两种关系做了比较生动的区分 依赖指的是两个类之间发生的关系输入偶然发生的 例如人和船之间的关系就是这种
  • Video_Codec_SDK压缩编码视频并封装为MP4格式

    在深度学习处理视频过程中 通常是先解码视频获取视频帧并转为cv Mat后进行处理 本章介绍如何将处理后的图片使用GPU编码为视频码流并封装为MP4格式 开发硬件 I7 9750H GTX1660ti 操作系统 Ubuntu16 04 驱动版
  • 24种设计模式之单例模式(饿汉式、懒汉式)

    一 单例模式 单例模式 Singleton Pattern 是指确保一个类在任何情况下都绝对只有一个实例 并提供一个全局访问点 单例模式是创建型模式 单例模式在现实生活中应用也非常广泛 例如 总统 班主任等 J2EE标准中的ServletC
  • 理解SPDX

    SPDX The Software Package Data Exchange SPDE an open standard for communicating software bill of material information in
  • 基于RFID技术在物流仓储中的解决方案—铨顺宏FUWIT

    一 行业背景 2011年6月8日国务院出台物流行业新国八条 明确指出要推进物流技术创新和应用 加强物流新技术自主研发 加快仓储物流设备研制 制定和推广物流标准 适时启动物联网的应用示范 推进物流信息资源开放共享 物流信息化 指在物流活动中全
  • 基于Opencv的水位识别,液面识别、高度识别

    Update 代码已经上传到github上了 可以点这里 Cutting 一直说这要整理一下Computer Vision课程的大作业 拖了好久 这两天忙着写一个订单处理的第三方库 陷入了僵局 所以换个口味 把大作业整理一下 Require
  • python入门到精通 _7异常、模块与包

    文章目录 1 异常捕获 1 1 捕获常规异常 1 2 捕获指定异常 1 3 捕获多个异常 1 4 异常的finally 2 模块的导入与自定义 2 1 模块的导入 2 2 模块的自定义 3 安装第三方包与自定义 3 1 自定义包 3 2 安