首页 > 编程语言 >快速掌握 python进阶【异常处理】【文件操作】

快速掌握 python进阶【异常处理】【文件操作】

时间:2024-11-14 20:47:34浏览次数:3  
标签:文件 logging 进阶 python except try print txt

一、异常处理机制

异常的定义:程序运行时发生的不正常事件。

使用异常处理机制,捕获异常,处理异常。

异常分为:内置异常、自定义异常。

1.1 内置异常处理

异常处理是对异常进行捕获、抛出、处理,提高程序健壮性的机制。

算法的设计要求:正确性、可读性、健壮性、高效率、低存储

使用关键字try except finally else组合成不同的处理方式,其中try和except是核心。

简单模式:

try:
    代码1
except:
    代码2
    
例子:
try:
    print(name)
except:
    print("命名错误")

捕获多个异常结构

try:
    代码块
except XXX:
    代码2
except XXX:
    代码3
except XXX:
    代码4
    
例子:
try:
    print('hello' + 1234)
except NameError:
    print("命名错误")
except TypeError:
    print("类型错误")
except IndentationError:
    print("缩进错误")
    
try:
    print('hello' + 1234)
except (NameError, TypeError, IndentationError):
    print("有错误")
    
try:
    print('hello' + 1234)
except Exception as e:
    print(f"有{e}错误")

try...except...else结构

语法:
try:
    代码1
except:
    代码2
else:
    代码3
    
例子:
try:
    a = 3
    b = 0
    c = a/b
except Exception as e:
    print(f"{e}错误")
else:
    print(c)

 try...except...else...finally结构

语法:
try:
    代码1
except:
    代码2
else:
    代码3
finally:
    代码4
    
例子:
try:
    a = 3
    b = 1
    c = a/b
except Exception as e:
    print(f"{e}错误")
else:
    print(c)
finally:
    print("不用管我,异常还不是不异常,我都会输出")

练习:

1、使用异常处理,定义一个函数func(listinfo)listinfo为列表,

listinfo = [133, 88, 24, 33, 232, 44, 11, 44], 返回列表中小于100且为偶数的数。

def func(listinfo):
    try:
        ret=filter(lambda x:x<100 and x%2==0,listinfo)
    except Exception as e:
        print(e)
    else:
        print(list(ret))
listinfo=[133,88,24,33,123,44,11,44]
func(listinfo)

1.2 自定义异常

                自定义异常——可以根据自己的实际需求做异常判断。

                raise   手动抛出异常——内置异常、自定义异常都可以。

1.自定义异常必须继承    Exception  类

语法格式:
class MyException(BaseException):
    def __init__(self, msg):
        self.msg = msg
    def __str__(self):
        return self.msg
        
try:
    raise MyException('异常消息字符串')
except MyException as e:
    print(e)

1.3  demo2:日志的简单应用

在python中,记录日志使用logging库,日志的级别从高到低分别为:

  1. CRITICAL:系统崩溃级别的错误,必须立即处理
  2. ERROR:运行时的错误,可能导致程序无法正常运行
  3. WARNING:警告信息
  4. INFO:信息性消息,程序正常运行
  5. DEBUG:详细信息,通常在诊断问题时有用
import logging
# 设置日志的打印级别
# logging.basicConfig(level=logging.DEBUG)
logging.critical('这是一个critical信息')
logging.error('这是一个error信息')
logging.warning('这是一个warning信息')
logging.info('这是一个info信息')
logging.debug('这是一个debug信息')
# 向指定的日志文件里去打印日志信息
import logging
# logging.basicConfig(filename='./app.log')
# logging.warning('这是一个warning信息')

# logging.basicConfig(filename='./app.log', level=logging.DEBUG, filemode='a',
#                     format='%(name)s - %(levelname)s - %(message)s')
# logging.warning('这是一个warning信息')

# %(name)s    日志记录器的名字
# %(levelname)s    日志级别
# %(asctime)s    时间
# %(message)s    消息本身

二、文件操作

2.0 文件操作的重要性和应用场景

2.1 文件的基本概念

2.1.1 文件的概念

文件是一个存储在某种持久性存储介质【硬盘、光盘、磁盘等】上的数据的结合

文件可包含各种类型的信息:文本、图像、音频、视频、应用程序代码、其他类型的二进制数据。

文件通常由数据、元数据、文件系统等几部分组成。

文件的属性有:文件名、位置、文件类型、文件大小、创建日期、修改日期、访问权限。

2.1.2 文件的分类

s = "hello world!"

print("文本文件:", s)
print("二进制文件:", s.encode())

2.1.2 文件位置【路径】

路径分绝对路径相对路径。

windows系统下:

这里的点有特殊含义,一个点表示当前路径下两个点表示上一级路径下。

path = "C:\\Users\\admin\\Desktop\\py_gj\\py_day3"
print(path)

path1 = './day3.3.py'
print(path1)

path2 = "../py_day2/day2.2.py"
print(path2)

2.2 文件的操作

2.1.1 打开文件

mode常用的模式:

打开方式

功能

文件存在时

文件不存在时

r

只读方式打开文件

打开

报错

r+

以读写方式打开文件

打开

报错

w

只写方式打开文件

打开(清空之前内容)

新建

w+

以读写方式打开文件

打开(清空之前内容)

新建

a

以追加方式打开文件(写)

打开,保留之前内容

新建

a+

以读写方式打开文件

打开,保留之前内容

新建

        mode参数 可以指定以什么样的编码方式读写文本,默认情况下open是以文本形式打开文件的,比如上面的四种mode模式。

当我们需要以"字节[二进制]"形式读写文件时,只需要在mode参数的后面加 b 就可以了。

  1. rb 以二进制形式打开一个文件,只读
  2. wb 以二进制形式打开一个文件,只写
  3. wb+ 以二进制形式打开一个文件,读写

demo1:读取文件

  1. 通过代码去读取  111.txt  文本文件的内容        “人生苦短,我用python”

# 1、打开文件
f = open("./111.txt", encoding='utf-8')
# 2、读取内容
read_data = f.read()
# 3、输出读取到内容
print(read_data)
# 4、关闭
f.close()

2.2.2 关闭文件 /    read()方法

2.2.3 readline()  readlines()     

2.2.4 write()方法

 read方法

readline   readlines 

with open("./111.txt",'r',encoding="utf-8") as f:
   x=f.readline()
  #x=f.readlines()
   print(x)

write方法(在111.txt中写入“hahahah”)

a='\nhahahah'
with open("./111.txt",mode='a',encoding="utf-8") as f:
    f.write(a)
# (一)将一个字符串写入二进制文件中 binary.txt。
# 要求:
# 1、这将创建一个名为 binary.txt 的二进制文件
# 2、并将字符串 Hello, world! 写入其中。

 方法一:
 with open("./binary.txt",mode='wb') as f:
     f.write(b"Hello, world!")

 方法二:
 s="Hello, world!"
 with open("./binary.txt", mode='wb') as f:
     f.write(s.encode())

 with open("./binary.txt",mode='rb') as f:
     x=f.read()
     print(x)

练习

# (三)将 1-100 之间能被 5 整除的数保存在列表 numbers 中
# 1. 将 numbers 中的元素写入到文件 num.txt 中
# 2. 使用文件操作方式打开 num.txt 文件读取内容,并计算它们的平均数
numbers=[x for x in range(1,101) if x%5==0]
with open("./numbers.txt",mode='w+',encoding='utf-8') as f:
    f.write(str(numbers))

with open("./numbers.txt", mode='r') as f:
    a=f.read()
    print(a)
from functools import reduce
s=reduce(lambda x,y:x+y,numbers)
print(s/len(numbers))
#结果为
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
52.5

2.2.3 文件指针定位

python中文件读写,定位文件读写的指针会随着不断地读写而移动。所以我们想要正确的读写,就需要控制指针的定位。

f.tell()
功能:返回文件的当前位置,即文件指针当前位置

f.seek(offset[, whence])
功能:将文件内部光标定位到指定的位置
参数:offset:开始的偏移量,也就是代表需要移动偏移的字节数
     whence:可选,默认值为 0,
      
             0代表从文件开头开始算起
      
             1代表从当前位置开始算起
      
             2代表从文件末尾算起
eg:
f.seek(p,0)  移动到文件第p个字节处,绝对位置

f.seek(p,1)  移动到相对于当前位置之后的p个字节

f.seek(p,2)  移动到相对文章尾之后的p个字节


f.seek(0,0)  移动到文件开头
  

s = "Hello, world!"

with open('./binary.txt', mode='wb+') as f:
    f.write(s.encode())
    # f.seek(2,0) # 从开头 偏移2个
    # f.seek(2,1) # 从当前 偏移2个
    # f.seek(2,2) # 从末尾 偏移2个
    # f.seek(0,0)
    data = f.read(1)
    print(data)

2.3 目录的操作 

s.mkdir() 是Python标准库中的os模块提供的一个函数,用于创建一个新的目录。
这个函数接受一个参数,即要创建的目录的路径名(可以是相对路径也可以是绝对路径)。
如果创建成功,该函数不会返回任何值;
如果遇到错误,比如路径已存在或者没有足够的权限,它会抛出一个异常。

os.mkdir() 只能创建一级目录,如果需要创建多级嵌套的目录,应该使用 os.makedirs() 函数。
import os

try:
    os.mkdir('./t1')
except Exception as e:
    print(e)

try:
    os.rmdir('./t1')
except Exception as e:
    print(e)

try:
    os.makedirs('./t1/t2')
except Exception as e:
    print(e)

标签:文件,logging,进阶,python,except,try,print,txt
From: https://blog.csdn.net/weixin_56261190/article/details/143777900

相关文章

  • Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码
    全文链接:https://tecdat.cn/?p=38195原文出处:拓端数据部落公众号 股票市场在经济发展中占据重要地位。由于股票的高回报特性,股票市场吸引了越来越多机构和投资者的关注。然而,由于股票市场的复杂波动性,有时会给机构或投资者带来巨大损失。考虑到股票市场的风险,对股价变动的研究......
  • Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化
    全文链接:https://tecdat.cn/?p=38224原文出处:拓端数据部落公众号 分析师:Duqiao Han 股票市场是一个复杂的非线性系统,股价受到许多经济和社会因素的影响。因此,传统的线性或近线性预测模型很难有效、准确地预测股票指数的价格趋势。众所周知,深度学习通过逐层特征转换,将原始......
  • Python包和模块管理
    二、模块模块是什么?模块就是一个.py文件,可以定义函数、类和变量,模块内也可能包含可执行的代码。模块的作用代码重用:模块可以将代码划分为更小的单元,方便在其他文件中重复使用。组织和结构化代码:模块帮助将大型代码库分解成逻辑单元,使代码结构更清晰。避免命名冲突:模块引......
  • 自学习python之字符串2
    字符串:格式化format()方法1.位置参数(字段)2.关键字参数(相当于变量赋值)如果位置参数和关键字参数结合使用时,位置参数必须在关键字参数前面,否则报错打印花括号 格式化符号1.字符串格式化符号含义2.格式化操作符辅助命令m.n:主要是.n,m一般没用3.字......
  • K-Means聚类分析以及误差平方和SSE(Python实现)
    K-means聚类的原理。K-Means算法的目标是将原始数据分为K簇,每一簇都有一个中心点,这也是簇中点的均值点,簇中所有的点到所属的簇的中心点的距离都比到其他簇的中心点更近。K-means聚类的算法流程。1、随机确定K个点作为质心(在本次实验中,我在数据中使用随机数选择了K个点作为初始......
  • 告别头文件,编译效率提升 42%!C++ Modules 实战解析
    编者按:AlibabaCloudLinux(简称“Alinux”)是目前阿里云上占比第一的操作系统。2021年,龙蜥以Alinux产品为基础发布了AnolisOS8正式版。本文中,阿里云智能集团开发工程师李泽政以Alinux为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个C++模......
  • python+vue基于django/flask新农村综合风貌展示平台java+nodejs+php-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python调用扣子coze智能体示例
    """版本号:1.0日期:2024/11/14描述:"""importuuidimportjwtimporttimeimportrequests#OAuth应用的相关信息,需从扣子平台获取并替换APP_ID=""#auth应用idPUBLIC_KEY_FINGERPRINT=""#公钥PRIVATE_KEY_PATH="private_......
  • Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件
    本文将介绍一种手动的轻量级的方式,还原HTTP/TLS协议中传输的文件,为流量数据包中的文件分析提供帮助。如果捕获的数据包中存在非文本类文件,例如png,jpg等图片文件,或者word,Excel等office文件异或是其他类型的二进制文件或者编码文件。如果想要了解这些非文本文件中的内容,往往......
  • asp.net使用Serilog按日志级别写入日志文件
    文章目录1、所需的Nuget包2、两种配置方式2-1代码形式(Program.cs)2-2配置文件形式(appsetting.json)3、实现效果如下1、所需的Nuget包我项目的版本是.NET8,其它版本安装适配版本即可2、两种配置方式2-1代码形式(Program.cs)在Program.cs文件中,添加如下代码//......