Python高级二

本文介绍了Python编程中异常处理的基本概念和常见类型,以及如何使用os和pathlib模块进行目录操作和文件操作。此外,还涵盖了多线程、多进程的使用、同步锁和管道在进程间通信的应用。
摘要由CSDN通过智能技术生成

一、异常

        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()

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值