python异常、模块和包

文章目录

  • 异常
    • 异常简介
    • 异常处理
      • 捕获所有异常
      • 捕获指定异常
      • 捕获多个指定异常
    • 异常else、finally
    • 异常的传递
  • 模块
    • 模块导入
    • 自定义模块
    • 自定义python包
    • 安装第三方python包
  • 综合案例

异常

异常简介

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

f = open('RLlearn_2.txt', "r", encoding='UTF-8')

下面上运行上面这段代码的结果

image.png

异常处理

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

捕获所有异常

基本语法:

try:可能发生错误的代码
except:如果出现异常执行的代码
# eg
try:f = open('linux.txt', 'r')
except:f = open('linux.txt', 'w')

捕获所有异常的另一种写法

try:f = open('linux.txt', 'r')
except Exception as e:print("出现异常了")

捕获指定异常

基本语法:

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

image.png

捕获多个指定异常

将需要补获多个异常类型用元组组合起来

try:print(1/0)
except (NameError, ZeroDivisionError) as e:print('ZeroDivision错误...')

异常else、finally

else表示的是如果没有异常需要执行的代码,这是一个可选功能

try:f = open('linux.txt', 'r')
except Exception as e:print("出现异常了")
else:print("11111")

finally表示的是无论是否异常都要执行的代码

# 有异常代码
try:f = open('linu.txt', 'r')
except Exception as e:print("异常")
else:print("else")
finally:print('finally')
# 无异常代码
try:f = open('linux.txt', 'r')
except Exception as e:print("异常")
else:print("else")
finally:print('finally')

有异常执行结果:

image.png

无异常执行结果:

image.png

异常的传递

异常是具有传递性的

先看一下这段代码

def f1():print('f1 start')num = 1 / 0print('f1 end')
def f2():print('f2 start')f1()print('f2 end')
def main():try:f2()except Exception as e:print(e)

image.png

当函数f1中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数f2,当f2也没有捕获处理这个异常的时候,main函数会捕获这个异常,这就是异常的传递性,当所有函数都没有捕获异常的时候,程序就会报错

异常传递这个特性就使得我们可以在更高的调用层级去捕获异常,而并不一定需要在异常直接出现的位置捕获异常。

模块

模块导入

Python 模块**(Module),是一个Python文件**,以**.py**结尾,模块能定义函数、类和变量,模块里也能包含可执行代码

模块的作用:python中有很多各种不同的模块,每一个模块都可以帮助我们快速的实现一些功能,可以认为一个模块就是一个工具包,每个工具包中都有不同的工具供我们使用进而实现各种不同的功能

语法:

[from module_name] import [module | class | variable | function] [as other_name]

常见的组合形式

import module_name
from module_name import class、variable、function
from module import *
import module as other_name
from module_name import 功能名 as other_name

案例

通过import module_name导入后,使用模块内的内容时需要module_name.

import timeprint(1)
time.sleep(5)
print(2)

通过from module_name import function_name导入后,就可以不用 module_name.function_name而是直接使用function_name

from time import sleepprint(1)
sleep(5)
print(2)

from module_name import *是将module内的全部功能进行导入

from time import *
sleep(3)

起别名,有时候模块的名字或者function的名字过程可以通过as other_name的方式给他们起别名

import time as t
t.sleep(2)
from time import sleep as sl
sl(2)

自定义模块

自定义模块就是自己写个python文件需要用的时候按照模块的导入正常导入就可以了

注意当导入多个模块的时候,并且模块内有同名功能,后导入的模块会覆盖前面的

if __name__ == '__main__'

可以用来测试模块,同时保证我们在别的python文件中导入模块的时候if条件里面的内容不会执行。

为什么可以呢?

# module.py文件
def test(a, b):return a + bif __name__ == '__main__':print(test(1, 2))

当我们运行module.py这个文件的时候,这时候python的内置变量__name__就会成为’main’,而运行在其他python文件导入这个模块的时候,这时这个模块的name就不再是main了,于是if语句里面的内容就不会被执行

如果一个模块文件有——all——变量,当使用from xxx import *导入时,只能导入列表中的元素。

image.png

自定义python包

python的包:

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

于是乎,报的作用也就是,当我们的模块文件越来越多时候,包就可以帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块

image.png

pycharm中创建包

image.png

导入包

方式一:

import package_name.module_name
import package_name.module_name.function_name

方式二:

通过在——init——.py中定义——all——变量来控制import *

方式和上面的导入module一样

image.png

安装第三方python包

什么是第三方包:第三方包就是非Python官方内置的包,可以安装他们扩展功能,提高开发效率。

image.png

安装第三方包-pip

pip这个应用程序是内置在python中的,只要正常安装了python就可以正常使用pip程序

image.png

但是可以看到虽然numpy在下载了,但是网速如龟速,这是因为pip默认都是连接的国外的网站在下载。

可以通过下面的命令来解决

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name

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

综合案例

image.png

image.png

str_util.py文件

def str_reverse(s):tmp = str()for i in s[len(s)-1:0:-1]:tmp = tmp + ireturn tmpdef substr(s, x, y):return s[x : y + 1 : 1]if __name__ == '__main__':print(str_reverse('123'))print(substr('1234578', 1, 5))

file_util.py文件

def printf_file_info(file_name):try:f = open(file_name, 'r', encoding='UTF-8')except:print('文件不存在')else:print(f.readlines())finally:f.close()def append_to_file(file_name, data):with open(file_name, 'a', encoding='UTF-8') as f:f.write(data)if __name__ == '__main__':printf_file_info('../1.txt')append_to_file('../1.txt', '\n Hello Python')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/36185.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python内存泄漏 —— 宏观篇

Python内存泄漏 —— 宏观篇 应该弄清楚哪些问题 内存情况如何,是否一直增长?哪些是异常对象?这类对象占总内存多大比例?异常对象为何泄漏?如何使其正常释放?如何确定异常对象正常释放了?如何…

Chromium CDP 开发(五):注册自己的指令(中)

引言 在前一篇文章中,我们已经了解了 PDL(Protocol Description Language)的基本功能以及如何在其中声明 CDP(Chrome DevTools Protocol)指令和事件的具体内容。接下来,我们将深入探讨如何在实际开发中进行…

回溯算法解决全排列问题

1. 问题描述 定义:给定一个不含重复数字的数组 nums ,返回其所有可能的全排列 。 示例: 输入数组 [1, 2, 3] 输出结果应该为: leetcode 地址 2. 代码实现 package com.ztq.algorithm.BackTrack;import java.util.List; impo…

金融行业 IT 实践|某信托公司:从虚拟化到容器平台的 VMware 替代与双活建设实践

随着“VMware 替代” 在金融行业的快速推进,不少金融用户的替代进程已逐渐从存储、虚拟化过渡到容器平台层面,实现更为全面的 VMware 国产化替代与架构升级。其中,某信托用户在使用 SmartX 超融合(采用 VMware 虚拟化和 Tanzu 容器…

python学习——格式化字符串

在Python中,格式化字符串是一种将变量插入到字符串中的方法,使得字符串的构建更为灵活和方便。以下是一些常见的格式化字符串的方法: 文章目录 1. 使用百分号 % 格式化2. 使用 str.format() 方法3. 使用 f-string (格式化字符串字面量)格式说…

【上线文档】系统上线方案模板,计算机系统上线保障计划,系统运维信息系统运行保障方案,系统上线方案模板(Word原件)

一、项目背景和目标 二、项目需求分析 2.1 功能需求 2.2 非功能需求 三、系统设计 3.1 系统架构设计 3.2 数据库设计 3.3 接口设计 3.4 用户界面设计 四、系统开发 4.1 开发环境搭建 4.2 业务逻辑开发 4.3 数据库实现 4.4 接口实现 4.5 用户界面实现 五、系统测…

MySQL索引再认识

在最近的一次MySQL测试过程中,我的同事幺加明遇到了一些令人困惑的现象,这些现象超出了我们最初的预期。一直以来,我们在建立索引时,首要考虑的原则是在区分度大的字段上建立索引。然而,在实际测试中,我们发…

SQL靶场第一关

打开sql靶场 一.判断注入类型 在网址输入?id1,页面正常回显 我们在输入?id1,页面报错,说明存在sql注入 我们再输入?id1 and 11--,页面正常回显 我们在输入?id1 and 12--,页面没有回显 这里我们知道了是字符型注入 为什么是…

ollama运行qwen2.5-coder:7b

1.linux安装 curl -fsSL https://ollama.com/install.sh | sh ollama serve # 启动ollama ollama create # 从模型文件创建模型 ollama show # 显示模型信息 ollama run # 运行模型,会先自动下载模型 ollama pull # 从注册仓库中拉取模…

牛客——打印日期,日期累加(C++)

目录 1.日期累加 1.1题目描述 1.2思路 1.3 2.打印日期 2.1题目描述 2.2思路 2.3代码 1.日期累加 1.1题目描述 计算一个日期加上若干天后是什么日期。输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。输出m行,每行按…

Stylus 浏览器扩展开发-Cursor AI辅助

项目起源 作为一个经常需要长时间盯着屏幕的开发者,我一直在寻找一个简单的方法来保护眼睛。最初的想法很简单:将网页背景色替换成护眼的豆沙绿。虽然市面上已经有类似的扩展,但我想要一个更加轻量且可定制的解决方案。 这个简单的需求逐渐…

AD20 原理图库和PCB库添加

一 点击右下角 二 点击Components 三 点击File-based Libraries Preferences 四 最后点击安装即可

微信小程序uni-app+vue3实现局部上下拉刷新和scroll-view动态高度计算

微信小程序uni-appvue3实现局部上下拉刷新和scroll-view动态高度计算 前言 在uni-appvue3项目开发中,经常需要实现列表的局部上下拉刷新功能。由于网上相关教程较少且比较零散,本文将详细介绍如何使用scroll-view组件实现这一功能,包括动态高度计算、下拉刷新、上拉加载等完整…

针对边缘计算优化LoRa的TinyML信道跳变管道

论文标题:Optimizing LoRa for Edge Computing with TinyML Pipeline for Channel Hopping(针对边缘计算优化LoRa的TinyML信道跳变管道) 作者信息:Marla Grunewald, Mounir Bensalem 和 Admela Jukan,来自德国布伦瑞克…

Linux-USB驱动实验

USB 是很常用的接口,目前大多数的设备都是 USB 接口的,比如鼠标、键盘、USB 摄像头等,我们在实际开发中也常常遇到 USB 接口的设备,本章我们就来学习一下如何使能 Linux内核自带的 USB 驱动。注意!本章并不讲解具体的 …

操作系统文件管理相关习题2

文件管理的任务和功能文件管理 任务:对用户文件和系统文件进行组织管理,以方便用户使用,并保证文件的安全 功能:文件存储空间的管理,目录管理,文件读写管理和保护 目录管理 对目录管理的要求 实现按名存…

MYSQL - 索引详解

一 什么是索引? 实际上在上一篇介绍MYSQL的体系结构当中我们稍微提及了一点,在引擎层,我们提到不同的引擎对应的索引的实现方式,选择是不一样的。 简单理解,索引(index)其实就是一种帮助MYSQL高…

AI智能体Prompt预设词指令大全+GPTs应用使用

AI智能体使用指南 直接复制在AI工具助手中使用(提问前) 可前往SparkAi系统用户官网进行直接使用 SparkAI系统介绍文档:Docs 常见AI智能体GPTs应用大全在线使用 自定义添加制作AI智能体进行使用: 文章润色器 你是一位具有敏锐洞察…

el-tree树形结构拖拽层级错乱问题

背景: 项目中有个文件夹树形菜单,并且各级菜单中的子级元素是可以任意拖拽的,也就是树形结构拖拽修改分组。 问题分析: 出现拖拽层级错乱的问题,这通常意味着在进行节点拖拽操作后,树的层级关系没有正确地被维护。这可能是因为在更新节点位…

线程和进程(juc)

线程 一:概念辨析 1:线程与进程 进程: 1:程序由指令和数据组成,指令要执行,数据要读写,就需要将指令加载给cpu,把数据加载到内存,同时程序运行时还会使用磁盘&#x…