Python高级二

一、异常

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VSCode单机活动栏图标无法收起

如果活动栏为展开状态,单击活动栏图标可以正常收起,但无法通过再次单击打开,解决方案如下: 设置->工作台->外观: Activity Bar:Icon Click Behavior: 切换为默认的toggle

C++ 作业 24/3/11

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff08;要求使用C风格字符串完成&#xff09; #include <iostream>using namespace std;int main() {string str;cout << "please enter str:&…

【Flutter 面试题】如何理解Flutter中的Widget、State、Context ,他们是为了解决什么问题?

【Flutter 面试题】如何理解Flutter中的Widget、State、Context &#xff0c;他们是为了解决什么问题&#xff1f; 文章目录 写在前面解答补充说明完整代码示例运行结果如下详细说明 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff…

svg简单教程

推荐查看这个视频 一小时讲完SVG 简介 scalable 英 /ˈskeɪləbl/ 美 /ˈskeɪləbl/ adj. &#xff08;计算机&#xff09; 可扩展的&#xff1b;可改变大小的&#xff0c;可缩放的&#xff1b;可攀登的&#xff1b;可称量的&#xff1b;可去鳞的 vector 英 /ˈvektə/ 美…

CTP-API开发系列之五:SimNow环境介绍

CTP-API开发系列之五&#xff1a;SimNow环境介绍 CTP-API开发系列之五&#xff1a;SimNow环境介绍SimNow模拟测试环境第一套第二套登录关键字段可视化终端常见问题 CTP-API开发系列之五&#xff1a;SimNow环境介绍 如果你要研发一套国内期货程序化交易系统&#xff0c;从模拟测…

Valid8Proxy:一款功能强大的工作代理获取、验证和存储工具

关于Valid8Proxy Valid8Proxy是一款功能强大且用户友好的代理管理工具&#xff0c;该工具功能丰富&#xff0c;旨在帮助广大研究人员获取、验证和存储工作代理的相关信息。 无论你是需要用于网络资源爬取、网络数字匿名化还是测试网络安全的代理&#xff0c;Valid8Proxy都可以…

如何利用AWS CloudFront 自定义设置SSL

Amazon CloudFront 提供三种选项&#xff0c;可以加速整个网站并从 CloudFront 的边缘站点通过安全的 HTTPS 方式交付内容。除能够安全地从边缘站点交付内容外&#xff0c;您还可以配置 CDN 来使用针对源提取的 HTTPS 连接&#xff0c;这样您的数据就会实现从源到最终用户的端到…

OpenHarmony教程—语言基础类库

介绍 本示例集合语言基础类库的各个子模块&#xff0c;展示了各个模块的基础功能&#xff0c;包含&#xff1a; ohos.buffer (Buffer)ohos.convertxml (xml转换JavaScript)ohos.process (获取进程相关的信息)ohos.taskpool (启动任务池)ohos.uri (URI字符串解析)ohos.url (UR…

3、设计模式之工厂模式

工厂模式是什么&#xff1f;     工厂模式是一种创建者模式&#xff0c;用于封装和管理对象的创建&#xff0c;屏蔽了大量的创建细节&#xff0c;根据抽象程度不同&#xff0c;主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。 简单工厂模式 看一个具体的需求 看一个…

计算机网络基础【信息系统监理师】

计算机网络基础【信息系统监理师】 1、OSI七层参考模型2、TCP/IP协议3、网络拓扑结构分类4、网络传输介质分类5、网络交换技术6、网络存储技术7、网络规划技术8、综合布线系统8.1、综合布线工程内容8.1、隐蔽工程-金属线槽安装8.2、隐蔽工程-管道安装槽道与各种管线间的最小净距…

WhatsApp模板信息申请大全:更好地触达WhatsApp客户

按照WhatsApp通话规则&#xff0c;用户主动和我们开始聊天后的24小时内&#xff0c;我们也是可以通过WhatsApp无限次数地与对方进行自定义消息对话&#xff0c;并且只计为一次服务型会话费用。 但是如果超过了24小时&#xff0c;我们还希望可以继续联系对方的话&#xff0c;只…

【ArcGIS】栅格数据进行标准化(归一化)处理

栅格数据进行标准化&#xff08;归一化&#xff09;处理 方法1&#xff1a;栅格计算器方法2&#xff1a;模糊分析参考 栅格数据进行标准化(归一化)处理 方法1&#xff1a;栅格计算器 栅格计算器&#xff08;Raster Calculator&#xff09; 方法2&#xff1a;模糊分析 空间…

Memcached的重要性,如果防范Memcached DDOS攻击

一、Memcached简要 Memcached是一个开源的、高性能的、分布式内存对象缓存系统。它的主要目的是通过降低对数据库的访问来加速动态Web应用程序。 Memcached的用途非常广泛&#xff0c;它主要用于动态Web应用以减轻数据库负载。通过在内存中缓存数据和对象&#xff0c;Memcach…

原生IP是什么?如何测试代理是不是原生IP?

一、什么是原生IP 原生IP地址是互联网服务提供商&#xff08;ISP&#xff09;直接分配给用户的真实IP地址&#xff0c;无需代理或转发。这类IP的注册国家与IP所在服务器的注册地相符。这种IP地址直接与用户的设备或网络关联&#xff0c;不会被任何中间服务器或代理转发或隐藏。…

YOLOv5-Openvino-ByteTrack【CPU】

纯检测如下&#xff1a; YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 注&#xff1a;YOLOv5和YOLOv6代码内容基本一致&#xff01; 全部代码Github&…

【MySQL知识体系】第1章 初识 MySQL

文章目录 第1章 初识 MySQL1.1 MySQL 介绍1.1.1 什么是 MySQL&#xff1f;1.1.2 MySQL 的特点&#xff1f;1.1.3 MySQL 默认端口&#xff1f; 1.2 安装 MySQL1.2.1在MacOS上安装MySQL1.2.2 在Windows上安装MySQL 1.3 如何选择 MySQL 客户端1.3.1 在MacOS上安装Workbench1.3.2 在…

【喜报!】科大睿智为企业成功通过CMMI5级评估!

山东智云信息科技有限公司成立于2011年&#xff0c;总部地处泉城济南&#xff0c;一直专注于生态环境信息化领域解决方案的咨询设计、产品研发、项目实施和系统集成类服务&#xff0c;致力于成为固定污染源监管与非现场精准执法领域的领军企业。 山东智云拥有100余名生态环境信…

论文:CLIP(Contrastive Language-Image Pretraining)

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

2024上半年软考中级《电子商务设计师》报名考试全攻略

​2024年软考电子商务设计师考试报名时间节点&#xff1a; 报名时间&#xff1a;上半年3月18日到4月15日&#xff0c;下半年8月19日到9月15日&#xff08;各地区报名时间不同&#xff0c;具体日期见官方通告&#xff09; 准考证打印时间&#xff1a;上半年5月20日起&#xff…

二维数组的传递和返回

指针和二维数组 指针存储的是内存单元的地址&#xff0c;当使用引用运算符 *&#xff0c;或者变址运算符 [ ] 时才能将指针所指向的内存单元中的值取出。 指针有两个关键属性&#xff1a; 1.它存储的是内存地址 2.它存储的是什么类型变量的内存地址&#xff0c;这一点非常…