【python基础篇】 5. python 异常、文件与流

1 异常

错误:语法错误(一般IDE能够发现),逻辑错误(很难发现,提示起来比较麻烦)

异常:当python检测到一个错误时,解释器无法继续执行下去,于是抛出相应的信息,这些信息称为异常

程序抛出异常的情况:

  1. 系统自己抛出异常,如除法操作时除数为0
  2. 程序主动抛出异常,代码中使用raise语句

1.1 异常处理

python中异常处理的常见结构

try:# 执行代码
except:# 发生异常时执行的代码
else:# 没有异常时执行的代码 
finally# 不管有没有异常都会执行的代码

其中elsefinally为非必需操作

代码示例

try:print('-----test--1---')open('123.txt','r')print('-----test--2---')
except IOError: pass
finally:print('finally')

IOError是指抛出了IO错误,python中有很多描述和处理异常的类,我们称之为异常类,异常类中定了包含该类异常的信息和对异常进行处理的方法,其中BaseException是所有异常的父类。

except捕获多个异常的情况

a = input("请输入分子:")
b = input("请输入分母:")
try:print('a/b的结果为:', int(a)/int(b))
except ZeroDivisionError as e:print(e) # 打印异常信息print("除数不能为0")
except ValueError:print("请输入数字")
except:   # 捕获其他未指定的异常print("其他异常")c = input("请输入分子:")
d = input("请输入分母:")
try:print('a/b的结果为:', int(a)/int(b))
except (ZeroDivisionError, ValueError): # 同时捕获多个异常print("除数不能为0或请输入数字")
except:   # 捕获其他未指定的异常print("其他异常")

raise抛出异常

def div(a, b):if b == 0:raise Exception("除数不能为0")else:return a / btry:result = div(10, 0)print(result)
except Exception as e:print("发生异常:", e)

assert的使用

assert:断言,不满足断言,会抛出错误AssertionError;当程序运行到某一个节点的时候,就会断定

def div(a, b):assert b > 0return a / bresult = div(10, 0)# 输出
'''File "C:\Users\maple\Desktop\python\1.py", line 5, in <module>result = div(10, 0)^^^^^^^^^^File "C:\Users\maple\Desktop\python\1.py", line 2, in divassert b > 0
AssertionError
'''

1.2 自定义异常

class ShortInputException(Exception):def __init__(self, length, atleast):# super().__init__()self.length = lengthself.atleast = atleast  
try:s = input('请输⼊ --> ')print(s)if len(s) < 3:# raise引发⼀个你定义的异常raise ShortInputException(len(s), 3)
except ShortInputException as result:#x这个变量被绑定到了错误的实例print('ShortInputException: 输⼊的⻓度是 %d,⻓度⾄少应是 %d'%(result.length, result.atleast))
else:print('没有异常发⽣.')

2 文件和流

根据文件中数据的组织形式,把文件分为以下的两类

  1. 文本文件:存储普通“字符”文本,python默认为unicode字符集(两个字节表示一个字符,最多可以表示 65536个),可以使用记事本程序打开。
  2. 二进制文件:把数据内容用“字节存储”,无法使用记事本打开,必须使用专用的解码软件。常见的格式有MP4、MP3、Word等

2.1 文件与文件夹操作

# f = open('test.txt', 'wra')  # 这种方式会报错  w r a 只能拥有一个  当需要读写模式同时存在,可以使用 a+ w+ r+ 的模式
f = open('test.txt', 'r+')
content = f.read(5) #读取前5个字符
print(content)
f.seek(0)  # 由于read直接读到了 文件中间某个位置 我们需要使用seek将指针跳至最前面
f.read() # 读取所有内容  有\n符
f.seek(0)
f.readlines() # 读取所有内容,返回一个list,每个元素为每一行  包含换行符
f.write('yes')  # 向文件中写入内容
position = f.tell() # 通过tell函数来获取目前光标开始的位置
f.seek(5, 0)  # 移动光标指针位置

open(file[,mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None])
file参数是必须的,指定需要打开的文件名,使用相对路径或者绝对路径都可以
mode参数用于指定文件模式,如只读、写入、追加等,具体如下表;
encoding用于指定编码读取文件,常见编码方式 UTF-8, unicode, GB2312, ISO8859-1等,具体大家可以查询相关的资料

文件模式描述
r读模式(默认)
w写模式(原文件存在会覆盖原文件)
a追加模式(原文件存在是在原文件之后追加内容)
b二进制模式(可与其他模式一起存在)
x排他的写模式(只能自己写)
t文本模式,默认值
+读写模式(必须与其他文件模式一起使用) r+(文件读写,文件存在,从当前位置开始追加内容,不存在则报错);w+(文件读写,文件存在则清空文件写入新内容,不存在则创建文件),a+(文件不存在则创建新文件,文件存在则指针跳到文件尾部,使用这种方式读取文件内容的时候,需要使用seek(0)跳入文件首部才可以读取文件)

open(filename, mode)函数用于打开一个文件,并返回文件对象f,文件对象常用的函数如下

方法描述
close()关闭文件,关闭文件之后不能再进行读写
flush()刷新文件内部缓存,直接把内部缓存区的数据立刻写入文件,而不是被动的等待输出缓冲区写入
fileno()返回一个整型的文件描述符,可以用在如os模块的read方法等一些底层操作上
isatty()如果一个文件连接到一个终端设备返回True,否则返回False
next()返回文件的下一行
read(size)从文件读取size大小的字节数,如果未指定或为负数则读取所有
readline()读取整行,包括\n换行符
seek(offset)设置文件当前位置
tell()返回文件当前位置
truncate()截取文件,截取的字节通过size指定,默认为当前文件位置
write(str)将字符串str写入文件,没有返回值
writelines(squence)向文件写入一个序列字符串列表,如果需要换行需要自己加入每行的换行符
以上的示例还可以通过 with包裹 如下
with open('test.txt', 'r+') as f:content = f.read(5) #读取前5个字符print(content)f.seek(0)  # 由于read直接读到了 文件尾部 我们需要使用seek将指针跳至最前面print(f.read()) # 读取所有内容  有\n符`f.seek(0)  # 由于read直接读到了 文件尾部 我们需要使用seek将指针跳至最前面print(f.readlines()) # 读取所有内容,返回一个list,每个元素为每一行  包含换行符f.write('yes') # 向文件中写入内容position = f.tell() # 通过tell函数来获取目前光标开始的位置# f.seek(5, 0) # 移动光标指针位置f.close()

2.2 seek函数讲解

f.seek(p, 0)f.seek(p)
将文件读取指针移动到文件的第p个字节处,表示绝对位置。f.seek(0)移动到文件头位置。
f.seek(p, 1)
在当前位置的基础上,将文件读取指针移动p个字节,表示相对位置。
f.seek(p, 2)
在文件尾的基础上,将文件读取指针移动p个字节,表示相对位置。f.seek(0, 2)移动到文件尾位置。

2.3 StringIO 与 BytesIO

有时候,数据读写不是对文件进行操作,也可以从内存(变量)中进行读写。 我们可以使用 StringIOBytesIO

from io import StringIO, BytesIOs = StringIO()
s.write("1")
s.write(" ")
s.write("2")print(s.getvalue()) # getvalue方法 获取写入后的 字符 s2 = StringIO("hello \n maple")
while True:s = s2.readline()if s == "":breakprint(s.strip())f = BytesIO()
f.write("i love it".encode("utf-8"))
print(f.getvalue())f2 = BytesIO(b'\xe4\xbd\xa0\xe7\x88\xb1')
print(f2.read().decode("utf-8"))

2.4 文件重命名

import os
os.rename('1.txt', '2.txt')

2.5 文件删除

import os
os.remove('1.txt')

2.6 文件复制(shutil模块)

shutil模块是对os模块的补充,提供了移动、复制等操作

一般复制操作用的比较多

import shutil
shutil.copyfile("1.txt", "1_copy.txt")  # 复制文件
shutil.copytree("a/b", "c", ignore=shutil.ignore_patterns("*.html", "*.css"))  # 当 c 文件夹不存在时才可以使用   用于复制文件夹,忽略 html 与 css 文件

2.7 文件夹操作

  • import os
  • 创建文件夹 os.mkdir(dir_name)
  • 删除文件夹 os.removedirs(dir_name)
  • 获取当前目录os.getcwd()
  • 获取目录列表os.listdir(dir_name)
  • 改变当前工作目录 os.chdir(dir_name)
    还有其他很多操作函数,这里就不一一列举,大家可以通过搜索(搜索引擎与大模型都可)查询相关使用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web3开发框架分析

Web3开发框架旨在简化区块链和去中心化应用&#xff08;DApp&#xff09;的开发过程&#xff0c;为开发者提供必要的工具和库。以下是一些主要的Web3开发框架。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Truffle Suite Truffl…

$MPC 登录MEXC,加速Partisia Blockchain 生态市场进程

Partisia Blockchain是一个以MPC技术方案为基础&#xff0c;具备可审计特性的隐私Layer1生态&#xff0c;与此同时&#xff0c;该链通过系列创新的系统架构&#xff0c;能够兼顾高迸发、安全、可拓展性以及可互操作特性。基于系列技术特性&#xff0c;Partisia Blockchain正在构…

OrangePi KunPengPro | linux系统下挂载U盘

OrangePi KunPengPro | linux系统下挂载U盘 时间&#xff1a;2024年6月6日21:32:53 文章目录 OrangePi KunPengPro | linux系统下挂载U盘1.参考2.操作fdisk -l 列出系统上所有磁盘的分区表信息将 /dev/sda1 分区挂载到 /mnt/udisk/ 目录显示文件系统的磁盘空间使用情况卸载文件…

RAG检索增强生成(1)-大语言模型的外挂数据库

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks Lewis P, Perez E, Piktus A, et al. Retrieval-augmented generation for knowledge-intensive nlp tasks[J]. Advances in Neural Information Processing Systems, 2020, 33: 9459-9474. RAG结合了信息检…

python中B.py调用A.py中所有方法,该怎么导入呢

函数调用 python中B.py调用A.py中所有方法&#xff0c;该怎么导入呢1. 确保A.py和B.py在同一目录2. 在A.py中定义一些方法3. 在B.py中导入A.py并调用其方法4. 运行B.py详细解释额外提示 2 采用from A.py import *是否可行1. 确保A.py和B.py在同一目录2. 在A.py中定义一些方法3.…

Java数据结构与算法(最长回文子串动态规划)

前言 动态规划主要用于解决具有重叠子问题和最优子结构性质的问题。它通过将问题分解为子问题来解决复杂问题&#xff0c;每个子问题仅解决一次&#xff0c;并将其结果存储&#xff0c;以供后续使用&#xff0c;从而避免了重复计算。 动态规划的基本思想 分解问题&#xff1…

C++入门 ros服务通信

一、 开发环境 ubuntu20.04 ros版本noetic 参考视频 https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p52&spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source4cd1b6f268e2a29a11bea5d2568836ee 二、 编写srv文件 在功能包下面创建srv文件夹…

【SpringBoot + Vue 尚庭公寓实战】项目初始化准备(二)

尚庭公寓SpringBoot Vue 项目实战】项目初始化准备&#xff08;二&#xff09; 文章目录 尚庭公寓SpringBoot Vue 项目实战】项目初始化准备&#xff08;二&#xff09;1、导入数据库2、创建工程3、项目初始配置3.1、SpringBoot依赖配置3.2、创建application.yml文件3.3、创建…

【Linux取经路】网络套接字编程——TCP篇

文章目录 前言十、Tcp Server 端代码10.1 socket、bind10.1 listen——监听一个套接字10.2 accept——获取一个新连接10.3 read——从套接字中读取数据10.4 write——向套接字中进行写入10.5 Tcp Service 端完整代码&#xff08;单进程版&#xff09;10.6 Tcp Server 端代码&am…

MySQL 8.0中查询缓存的废弃与原因分析

MySQL 8.0中查询缓存&#xff08;Query Cache&#xff09;的废弃与原因分析 引言 尽管MySQL的查询缓存&#xff08;Query Cache&#xff09;最初设计目的是为了提升性能&#xff0c;但因其存在严重的可扩展性问题和易成为系统瓶颈&#xff0c;MySQL在8.0版本中正式移除了这一…

这个世界,对于心态好的人,就是个大游乐场,越刺激越好玩。对于胆小鬼,那就是地狱,随时随地都会受伤

心态决定你的世界&#xff1a;游乐场还是地狱 在这个充满变数的世界里&#xff0c;我们的心态决定了我们看待世界的方式。对于心态积极的人来说&#xff0c;世界就像一个巨大的游乐场&#xff0c;每一个挑战都是一个新的游戏&#xff0c;每一个刺激都是乐趣的一部分。而对于那…

解决跨域的几种方法

解决跨域的方法主要有以下几种&#xff1a; 1.CORS&#xff08;跨域资源共享&#xff09; CORS是一种W3C规范&#xff0c;它定义了一种浏览器和服务器交互的方式来确定是否允许跨源请求。 服务器通过设置响应头Access-Control-Allow-Origin来允许或拒绝跨域请求。例如&#xf…

python-数据分析-缺失值-函数-数据类型

1 常用排序和统计函数 1 排序 sort_values() # by 指定排序的字段 可以传入列表&#xff0c;做多字段排序&#xff0c; 比如下面的例子&#xff0c; 当价格相同的时候&#xff0c; 价格相同的数据再按面积排序 # ascending 也可以传入列表&#xff0c;长度更by 的列表相同&…

[笔试训练](三十四)100:[NOIP2008]ISBN号码101:kotori和迷宫102:矩阵最长递增路径

目录 100:[NOIP2008]ISBN号码 101:kotori和迷宫 102:矩阵最长递增路径 100:[NOIP2008]ISBN号码 题目链接:[NOIP2008]ISBN号码_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解: 简单模拟 #include <iostream> #include<string> using namespace std; str…

大数据技术Hbase列数据库——topic2

目录 启动Hadoop启动HbaseHbase常用Shell命令基本命令关于表的操作增删改查询 启动Hadoop 1.到Hadoop安装目录下输入命令 sbin/start-all.sh[rootlocalhost hadoop-2.7.1]# sbin/start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starti…

Maven导入jar包到本地仓库

导入本地jar包 <dependency><groupId>com.xxl</groupId>-----------------(参数二)<artifactId>xxl-sso-client</artifactId>-----------(参数三)<version>1.1.2</version>-----------------------(参数四) </dependency>用m…

5-Django项目--分页与搜索(资产页面)

目录 views/asset_data.py asset_data/asset_data.html 搜索与分页笔记: 搜索 整数搜索 字符串搜索 分页 views/asset_data.py # -*- coding:utf-8 -*- from django.shortcuts import render, redirect, HttpResponse from django.utils.safestring import mark_safe f…

MySQL查询数据库响应时长的方法

要查询MySQL数据库的响应时长&#xff0c;通常我们需要测量查询执行的时间。MySQL本身并不直接提供一个查询来显示每个查询的响应时长历史记录&#xff0c;但我们可以使用MySQL的内置函数和工具来测量和记录查询的执行时间。 以下是一些方法&#xff0c;我们可以用来测量MySQL…

电子元器件采购商城的售后服务保障

电子元器件采购商城的售后服务保障是用户在采购电子元器件时的重要考量因素之一。以下是常见的售后服务保障内容&#xff1a; 退换货政策&#xff1a; 质量问题退换货&#xff1a;如果用户收到的元器件存在质量问题&#xff0c;通常可以在一定时间内申请退换货。无理由退换货&a…

Laravel PHP 给富文本内容的图片设置最大宽度(自适应)

Laravel & PHP $data->富文本字段 preg_replace(/<img\s([^>])>/i, <img $1 style"max-width: 100%;">, $data->富文本字段); Js解决 小程序富文本图片宽度自适应-CSDN博客