Python高级二

news2024/11/16 11:58:29

一、异常

        1、定义

        异常是在程序执行过程中出现的错误或意外情况。当程序遇到异常时,它会中断当前的执行流程,并尝试找到相应的异常处理机制来解决问题。

        2、常见异常类型

        SyntaxError:语法错误,通常是代码书写不符合Python语法规则。

        NameError:名称错误,当引用一个未定义的变量或函数时抛出。

        TypeError:类型错误,当对不支持的操作数类型进行操作时抛出。

        ValueError:值错误,当传入的参数类型正确但取值范围不正确时抛出。

        IndexError:索引错误,当访问列表、元组或字符串等序列类型时使用了无效的索引值时抛出。

        KeyError:键错误,当访问字典中不存在的键时抛出。

        FileNotFoundError:文件未找到错误,当尝试打开不存在的文件时抛出。

        3、示例

def func(x, y):
     if y != 0:
        return x/y

if __name__ == '__main__':
    try:  #包含所有可能抛出异常的代码
        a = int(input("x:"))
        b = int(input("y:"))
        res = func(a, b)
        print("res:", res)

        fd = open("file.txt", mode="r+")  # opend 打开文件
        print(fd)
    except ZeroDivisionError as err:   #as  保存异常信息
        print("*********************", err)
    except (IOError, NameError) as err:  #如果捕获多种异常  则使用元组
        print("error:11111111111111", err)

二、目录操作

           要进行目录操作,可以使用Python中的os模块或pathlib模块。这些模块提供了许多用于处理文件和目录的函数和方法。     

         1、创建目录

import os.path

#检查目录 12 是否存在或者是否是一个目录   存在:True 不存在:False
dir = "12"
if os.path.exists("12") is False:
    os.mkdir(dir)    #创建该目录
    print("目录创建成功")
else:
    print("目录已存在,创建失败")

        2、查看目录下的文件并分类

import os.path

# listdir(dir) :列举出dir 目录中的所有文件名
files = os.listdir("../day2")
print(files)
dir = []
fi = []
for file in files:
    path = "../day2/" + file  #"path" 通常指代文件系统中文件或目录的路径
    if os.path.isdir(path):
        dir.append(file)
    else:
        fi.append(file)
print("目录:", dir)
print("文件", fi)

三、文件操作

        open函数       

   open()函数是Python内置函数之一,用于打开文件并返回一个文件对象,以便对文件进行读取、写入或其他操作。

       file: 文件路径(包括文件名)

  mode: 打开文件的模式,常见的包括:

        "r": 只读模式,文件必须存在。

        "w": 只写模式,清空文件内容,若文件不存在则创建新文件。

        "a": 追加模式,在文件末尾添加内容,若文件不存在则创建新文件。

        "r+": 读写模式,允许读取和写入文件内容。

        其他参数:如buffering(缓冲大小)、encoding(文件编码)、errors(编解码错误处理方式)等

        返回值:open()函数返回一个文件对象,可以通过该文件对象执行文件的读取、写入等操作。

        1、权限

        "r":只读模式,文件必须存在,如果文件不存在则会引发错误。

        "w":只写模式,文件不存在则创建,文件存在则清空内容。

         "a":追加模式,文件不存在则创建,文件存在则在末尾追加内容。

         "r+":读写模式,文件必须存在,从文件头开始读写。

         "w+":读写模式,文件不存在则创建,文件存在则清空内容并从头开始读写。

         "a+":读写模式,文件不存在则创建,文件存在则在末尾追加内容并可以读取。

        2、打开文件

                   fd = open("file.txt", mode="w+")   #以读写模式打开文件file.txt

        3、读取文件内容

        res = fd.read(32)        #read(n)读取前n 字节的数据 返回str类型

        res = fd.readlines()     #readlines() :读取文件所有行数据, 返回list类型

        4、向文件写入内容

        fd.write("hello world")    #write()写入数据hello world

        5、示例

fd = open("file.txt", mode="w+")
with open("file.txt", mode="r+") as fd:
    l1 = ["123444\n", "45644\n", "789565\n", "goodbye\n"]
    fd.writelines(l1)   #按行写入数据  用于将一个字符串列表写入文件。每个字符串元素都作为一行写入文件。
    fd.close()

        6、with语句

        with语句是用于简化资源管理的一种方式,确保在代码块执行完成后自动关闭文件、释放锁或者执行其他清理操作。

四、多线程 

        示例

from threading import Thread
from time import sleep, ctime


def study(book):
    for i in range(5):
        print("I'm study 《{}》 {}".format(book, ctime))
        sleep(1)
def music(music):
    for i in range(5):
        print("I'm listening 《{}》".format(music))
        sleep(2)

if __name__ == '__main__':
    #Thread() : 创建线程  target : 用指定线程执行函数  args:传递数据到线程中
    t1 = Thread(target = study, args = ("模电",))
    #start(): 启动线程
    t1.start()

    t2 = Thread(target=music, args=("蓝莲花",))
    # start(): 启动线程
    t2.start()

    t1.join()
    t2.join()

五、多进程

        示例

from multiprocessing import Process
from time import sleep, ctime


def study(book):
    for i in range(5):
        print("I'm study 《{}》 {}".format(book, ctime()))
        sleep(1)

def music(music):
    for i in range(5):
        print("I'm listening 《{}》".format(music))
        sleep(2)

if __name__ == '__main__':
    #Process() : 创建进程  target : 用指定进程执行函数  args:传递数据到线程中
    t1 = Process(target=study, args=("模电",))
    #start(): 启动进程
    t1.start()

    t2 = Process(target=music, args=("蓝莲花",))
    # start(): 启动进程
    t2.start()

    t1.join()
    t2.join()

六、锁

        在多线程编程中,锁是一种同步机制,用于控制多个线程对共享资源的访问。使用锁可以确保在任意时刻只有一个线程可以访问共享资源,从而避免多个线程同时修改共享数据导致的数据不一致或竞态条件等问题。

from threading import Thread, Lock

# 共享资源
counter = 0
l = Lock()
# 定义一个函数,用于增加计数器的值
def increase_counter():
    global counter
    for _ in range(1000):
        with l:
            counter += 1


# 创建两个线程分别增加计数器的值
 #Thread() : 创建线程  target : 用指定线程执行函数  args:传递数据到线程中
thread1 = Thread(target=increase_counter)
thread2 = Thread(target=increase_counter)

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print("Final value of counter:", counter)



七、管道

        管道(Pipe)是一种进程间通信机制,通常用于在父进程和子进程之间传递数据。在Python中,可以使用multiprocessing模块中的Pipe类来创建管道。

        示例

from multiprocessing import Process, Pipe, freeze_support

# 子进程的函数,接收父进程发送的消息并回复
def child_process(conn):
    while True:
        msg = conn.recv()  # 接收消息
        print("Received message from parent:", msg)
        if msg == "exit":
            break
        reply_msg = "Message received: " + msg
        conn.send(reply_msg)  # 回复消息
    conn.close()

if __name__ == '__main__':
    freeze_support()  # 添加这一行
    # 创建管道
    parent_conn, child_conn = Pipe()

    # 启动子进程
    p = Process(target=child_process, args=(child_conn,))
    p.start()

    # 父进程向子进程发送消息并接收回复
    messages = ["Hello", "How are you?", "exit"]
    for msg in messages:
        parent_conn.send(msg)  # 发送消息
        if msg == "exit":
            break
        reply = parent_conn.recv()  # 接收回复
        print("Received reply from child:", reply)

    p.join()

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

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

相关文章

js【详解】DOM

文档对象模型(Document Object Model,简称DOM) DOM 是哪种数据结构 ? DOM 的本质是浏览器通过HTML代码解析出来的一棵 树。 操作 DOM 常用的 API 有哪些 ? 获取 DOM 节点 //方式 1:通过【id】获取&#xf…

【C++】STL(二) string容器

一、string基本概念 1、本质 string是C风格的字符串,而string本质上是一个类 string和char * 区别: char * 是一个指针 string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。 2、特点 1、stri…

PyCM:Python中的混淆矩阵库

PyCM:Python中的混淆矩阵库 在机器学习和数据科学领域,评估模型的性能是至关重要的。混淆矩阵是一种常用的评估工具,用于可视化和量化分类模型的预测结果。PyCM是一个开源的Python库,提供了丰富的功能来计算和分析混淆矩阵。本文将…

rancher是什么

Rancher Labs是制作Rancher的公司。Rancher Labs成立于2014年,是一家专注于企业级容器管理软件的公司。它的产品设计旨在简化在分布式环境中部署和管理容器的过程,帮助企业轻松地采用容器技术和Kubernetes。Rancher Labs提供的Rancher平台支持Docker容器…

Java网络编程详解

目录 网络编程 1、概述 2、网络通信的要素 3、IP 4、端口 5、通信协议 6、TCP 文件上传 Tomcat 7、UDP 单方发送单方接受 双方发送接收 8、URL URL测试 URL下载网络资源 网络编程 1、概述 信件: 计算机网络: 计算机网络是指将地理位置不…

刘敏:楼氏动铁和麦克风助力听力健康技术发展 | 演讲嘉宾公布

一、助辅听器材Ⅱ专题论坛 助辅听器材Ⅱ专题论坛将于3月28日同期举办! 听力贯穿人的一生,听觉在生命的各个阶段都是至关重要的功能,听力问题一旦出现,会严重影响生活质量。助辅听器材能有效提高生活品质。在这里,我们将…

FLatten Transformer_ Vision Transformer using Focused Linear Attention

paper: https://arxiv.org/abs/2308.00442 code: https://github.com/LeapLabTHU/FLatten-Transformer 摘要 当将transformer模型应用于视觉任务时,自注意的二次计算复杂度( n 2 n^2 n2)一直是一个持续存在的挑战。另一方面,线性注意通过精心设计的映射…

AI会砸了我们的饭碗?

Sora,由OpenAI推出,是一款创新的文本到视频生成模型。它能够将文本描述转化为引人入胜的高清视频片段。采用了扩散模型和变换器架构,Sora实现了高效的训练。其方法包括统一表示法、基于补丁的表示法、视频压缩网络和扩散变换器。 Sora具备多种…

数据分析-Pandas如何画图验证数据随机性

数据分析-Pandas如何画图验证数据随机性 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表…

【git bug】warning: auto-detection of host provider took too long (>2000ms)

【git bug】warning: auto-detection of host provider took too long (>2000ms) 报错问题: warning: auto-detection of host provider took too long (>2000ms) 报错截图: 报错描述: 在windows操作系统,未连接互连网电…

Docker初体验之安装部署和镜像加速(openeuler版)

安装部署: 本人使用的为openeuler版本,无法使用二进制进行安装(使用二进制安装时,无法使用docker中的补全命令,需要重新进行配置)在此使用yum直接进行安装。 [rootlocalhost ~]# yum install docker 镜像…

CKB转型为BTC Layer2后月涨超 300%,还有哪些转型热门赛道的老项目?

虽然说牛市下,炒新不炒旧。但一些渡过漫长熊市的老牌项目方,重新回到牌桌前开始新叙事后,市场依然有人买单。 部分项目方已经初步尝到了甜头,Arweave(AR)宣布从去中心化数据存储转换到「以太坊杀手」后&am…

STM32CubeMX学习笔记20——SD卡FATFS文件系统

1. FATFS文件系统简介 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构(即在存储设备上组织文件的方法)。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统;不带文件系统的SD卡仅能…

论文:CLIP(Contrastive Language-Image Pretraining)

Learning Transferable Visual Models From Natural Language Supervision 训练阶段 模型架构分为两部分,图像编码器和文本编码器,图像编码器可以是比如 resnet50,然后文本编码器可以是 transformer。 训练数据是网络社交媒体上搜集的图像…

数据结构---复杂度(2)

1.斐波那契数列的时间复杂度问题 每一行分别是2^0---2^1---2^2-----2^3-------------------------------------------2^(n-2) 利用错位相减法,可以得到结果是,2^(n-1)-1,其实还是要减去右下角的灰色部分,我们可以拿简单的数字进行举例子&…

Halcon测量专栏-圆弧测量

1.前言 1.1什么是圆弧 圆上任意两点间的部分叫做圆弧。由于圆弧有正反的特性,即为有顺时针方向和逆时针方向,在确定圆弧时,也需要确定圆弧的方向。 1.2halcon实现方式 针对圆弧的问题。1:它与圆是相似的,都具备中心…

(完美方案)解决mfc140u.dll文件丢失问题,快速且有效的修复

唉,又是丢失了mfc140u.dll,这该怎么办呢?如果你的电脑突然找不到或丢失mfc140u.dll文件,那就真是太糟糕了。别担心,我分享给你一些干货,告诉你如何快速解决mfc140u.dll丢失的问题。 一.mfc140u.dll属性功能…

分布式之Ribbon使用以及原理

Ribbon使用以及原理 1、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去,nginx作为反向代理,然后路由给后端的服务器,由于负载均衡算法是nginx提供的,而nginx是部署到服务器端的,所…

数据结构入门(3)2.链表接口实现

目录 前言 头文件 动态申请一个结点 单链表打印 单链表尾插 单链表的头插 单链表的尾删 单链表头删 单链表查找 单链表在pos位置之后插入x 单链表删除pos位置之后的值 在pos的前面插入 删除pos位置 销毁顺序表 前言 本文将介绍链表常见的功能的实现 头文件 #…

【Java】仓库管理系统 SpringBoot+LayUI+DTree(源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…