Python程序异常处理

【Python】异常处理 要理解 Python 异常,我们首先需要将视野拓宽到计算机硬件层面。在计算机体系结构中,“异常”并非编程语言独有的概念,它根植于 CPU 的设计哲学之中。在最低层,CPU 通过“中断(Interrupt)”来响应外部事件。中断是一种异步事件,它会打断 CPU 当前正在执行的指令序列,强制 CPU 跳转到预先定义好的“中断服务例程(Interrupt Service Routine, ISR)”去处理这个事件。例如:这些硬件中断是 CPU 与外部设备高效协作的基础。它们使得 CPU 无需不断地“轮询”设备状态 阅读详情

一、什么是异常

异常就是程序运行时发生错误的信号,在程序由于某些原因出现错误的时候,若程序没有处理它,则会抛出异常,程序也的运行也会随之终止;

  • 程序异常带来的问题:

1.程序终止,无法运行下去;  2…如果程序是面向客户,那么会使客户的体验感很差,进而影响业务;

  • 什么时候容易出现异常:

当处理不确定因素时,比如有用户参与,有外界数据传入时,都容易出现异常;

  • 产生异常事件大致分两种:
    1.由于语法错误导致程序出现异常,这种错误,根本过不了Python解释器的语法检查,必须在程序执行前就改正;
#语法错误示范一:
if

#语法错误示范二:
def func:

#语法错误示范三:
class foo
    pass

#语法错误示范四:
print(hello word

2.就是由于代码的逻辑问题使程序产生了异常;

#错误示例:
for n in 3:
    pass

#错误示例:
[][1]

二、异常的类型

异常也是有分类的,不同的异常用不同的类型去标识,不同的类对象标识不同的异常,一个异常标识一种错误;

常用的异常种类:

'''
AttributeError            #试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError                      # 输入/输出异常;基本上是无法打开文件
ImportError               #无法引入模块或包;基本上是路径问题或名称错误
IndentationError        #语法错误(的子类) ;代码没有正确对齐
IndexError                 #下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError                     #试图访问字典里不存在的键
KeyboardInterrupt      #Ctrl+C被按下
NameError                  #使用一个还未被赋予对象的变量
SyntaxError                #Python代码非法,代码不能编译,其实是语法错误;
TypeError                    #传入对象类型与要求的不符合
UnboundLocalError      #试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError                   #传入一个调用者不期望的值,即使值的类型是正确的

'''                    

在这里插入图片描述

三、异常处理机制

先来看看程序异常后,怎么报的错,我们从报错中能够分析出什么。
在这里插入图片描述

什么是异常处理?

python解释器检测到错误,触发异常(也允许程序员自己触发异常),程序员编写特定的代码,专门用来捕获这个异常(这段特点代码与逻辑程序无关和异常处理有关);如果捕获成功则进入另一个处理分支,执行为其定制的逻辑,使程序不会崩溃,这就是异常处理。

为什么要进行异常处理?

python解释器去执行程序,检测到一个错误时,触发异常,异常触发后且没有被处理的情况下,程序就在当前异常处停止运行,后面的代码不会执行,那么没有人会去使用一个运行着突然就崩溃的软件的;所以我们有必要提供一种异常处理机制来增强程序的健壮性和容错性。

如何进行异常处理?

首先须知,异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正;

1.使用if判断式
num1=input('>>: ') #输入一个字符串试试
int(num1)

使用if判断进行异常处理

num1=input('>>: ') #输入一个字符串试试
if num1.isdigit():
    int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴
elif num1.isspace():
    print('输入的是空格,就执行我这里的逻辑')
elif len(num1) == 0:
    print('输入的是空,就执行我这里的逻辑')
else:
    print('其他情情况,执行我这里的逻辑')

问题一:
使用if的方式我们只为第一段代码加上了异常处理,但这些if,跟你的代码逻辑并无关系,这样你的代码会因为可读性差而不容易被看懂

问题二:
这只是我们代码中的一个小逻辑,如果类似的逻辑多,那么每一次都需要判断这些内容,就会倒置我们的代码特别冗长。

小结:

1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理;

2.在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差;

3.if是可以解决异常的,只是存在1,2的问题,所以,千万不要妄下定论if不能用来异常处理;

之前用来判断异常的方法,比如不能输入数字或字母等等

def test():
    print('test running')
choice_dic={
    '1':test
}
while True:
    choice=input('>>: ').strip()
    if not choice or choice not in choice_dic:continue #这便是一种异常处理机制啊
    choice_dic[choice]()
2.python为每一种异常定制了一个类型,然后提供了一种特定的语法结构来进行异常处理;

首先重要的几种搭配格式列出来:

try ... except

try ... except ... else

try ... finally

try ... except ... finally

try ... except ... else ... finally
1)基本语法

异常处理的基本语法

try:
     被检测的代码块
except 异常类型:
     try中一旦检测到异常,就执行这个位置的逻辑

异常处理例子

try:
    a = "A"
    b
except NameError:
    print("b没有赋值会引发程序异常,异常类型时NameError,我们通过"
          "捕获这个异常,使其不会崩溃,继而执行此分支,也就是当前"
          "打印的这段话")

---------------------  运行后的效果 ----------------------------------------------
b没有赋值会引发程序异常,异常类型时NameError,我们通过捕获这个异常,使其不会崩溃,继而执行此分支,也就是当前打印的这段话
2)异常类只能用来处理指定的异常情况,如果非指定异常则无法处理;
try:
    a = "A"
    b
except IndexError:
    print("b没有赋值会引发程序异常,异常类型时NameError,我们通过"
          "捕获这个异常,使其不会崩溃,继而执行此分支,也就是当前"
          "打印的这段话")

-------------------- 运行后的效果  -----------------------------------------------
Traceback (most recent call last):
  File "E:/python/s15/异常处理.py", line 3, in <module>
    b
NameError: name 'b' is not defined

因为我们设置的捕获异常类和其发生异常的类不是一个类,所以捕获不到;

3)多分支

说明:从上向下报错的代码只要找到一个和报错类型相符的分支就执行这个分支中的代码,然后直接退出分支;如果找不到能处理和报错类型相同的分支,会一直往下走,最后还是没有找到就会报错。

多分支异常处理

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)

这里我们需要知道的是as的已是就是将捕获到的异常的内容赋值给变量e,变量e是不固定的,也可以使用其他字母来代替,这样的话,既方便我们对异常的内容进行分析,也不影响程序的执行。

4)多分支合并

说明:如果说我们有多个异常在处理时需要共同处理,比如说,只要发生IndexError和NameError异常了,我们就执行或打印一段代码时,就可以使用多分支合并的方式了;

多分支合并例子

l = ['login','register']
for num,i in enumerate(l,1):
     print(num,i)

  try:
     num = int(input('num >>>'))
     print(l[num - 1])
  except (ValueError,IndexError) :
     print('您输入的内容不合法')
5)万能异常;

说明:在python的异常中,有一个万能异常:Exception,它可以捕获任意异常;

s1 = 'hello'
try:
    int(s1)
except Exception as e:
    print(e)

注意:万能异常应该分两种情况去看;

  • 如果想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么只有一个Exception就足够了。

  • 如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了

多分支+Exception

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
except Exception as e:
    print(e)
6)as用法:

说明:能够将具体错误信息打印出来,赋值给变量;

7)异常的其他机构,else,finally;

else 说明:当try内的代码块没有报错时并且还要继续运行程序的话就用else;

finally 说明:无论try内的代码块是否异常,都执行该区域内的代码,通过用来进行清理工作;尤其注意如果在函数中有finally,即使return也会先执行fianlly中的代码。

else 以及 finally

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
#except Exception as e:
#    print(e)
else: #Python小白交流学习群:711312441
    print('try内代码块没有异常则执行我')
finally:
    print('无论异常与否,都会执行该模块,通常是进行清理工作')
8)主动触发异常 raise;

说明:这是给开发者用的,比如我们现在用的python,作者就会在python中加入主动触发异常,就是用来给开发者的,当遇到异常时会报错,提示开发者;

>>> try:
...     raise TypeError('类型错误')
... except Exception as e:
...     print(e)
... 
类型错误
9)断言 语法

说明:assert断言语句用来声明某个条件是真的,其作用是测试一个条件(condition)是否成立,如果不成立,则抛出异常。

语法:assert condition

如果condition为false,就raise一个AssertionError出来。逻辑上等同于:

if not condition:
    raise AssertionError()

assert condition,expression

如果condition为false,就raise一个描述为 expression 的AssertionError出来。逻辑上等同于:

if not condition:
        raise AssertionError(expression)

使用例子:

assert 断言例子

>>> assert 1 == 1
>>> assert 1 == 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> assert 1 == 2,"这是什么鬼"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: 这是什么鬼
10)自定义异常

在我们自定义返回异常时,最好使用异常code + 异常data的方式;看一个例子:

#去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。
#code值+data
#1000,成功
#1001,文件不存在
#1002,关键字为空
#1003,未知错误

#方法一:
import os
def func(path,prev):
    """
    去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。
        1000,成功
        1001,文件不存在
        1002,关键字为空
        1003,未知错误
        ...
    :return:
    """
    response = {'code':1000,'data':None}
    try:
        if not os.path.exists(path):
            response['code'] = 1001
            response['data'] = '文件不存在'
            return response
        if not prev:
            response['code'] = 1002
            response['data'] = '关键字为空'
            return response
        pass  #业务代码区
    except Exception as e:
        response['code'] = 1003
        response['data'] = '未知错误'
    return response



#方法二:
import os

class ExistsError(Exception):
    pass

class KeyInvalidError(Exception):
    pass

def new_func(path,prev):
    """
    去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。
        1000,成功
        1001,文件不存在
        1002,关键字为空
        1003,未知错误
        ...
    :return:
    """
    response = {'code':1000,'data':None}
    try:
        if not os.path.exists(path):
            raise ExistsError()

        if not prev:
            raise KeyInvalidError()
        pass
    except ExistsError as e:
        response['code'] = 1001
        response['data'] = '文件不存在'
    except KeyInvalidError as e:
        response['code'] = 1002
        response['data'] = '关键字为空'
    except Exception as e:
        response['code'] = 1003
        response['data'] = '未知错误'
    return response



##方法三:
class MyException(Exception):
    def __init__(self,code,msg):
        self.code = code
        self.msg = msg
try:  #Python小白交流学习群:711312441
    raise MyException(1000,'操作异常')
    pass
except KeyError as obj:
    print(obj,1111)
except MyException as obj:
    print(obj,2222)
except Exception as obj:
    print(obj,3333)
----------------------- 打印结果 -------------------------------------------
(1000, '操作异常') 2222
try方式比较if的方式的好处:

try…except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性,异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性 ;

使用try…except的方式:

  • 把错误处理和真正的工作分开来

  • 代码更易组织,更清晰,复杂的工作任务更容易实现

  • 毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了

什么时候用异常处理?

try…except应该尽量少用,因为它本身就是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的

这种东西加的多了,会导致你的代码可读性变差,只有在有些异常无法预知的情况下,才应该加上try…except,其他的逻辑错误应该尽量修正

Python的异常处理 程序错误分为两种:语法错误 和 异常错误。 语法错误:代码没有按照python规定语法去写,发明创造产生的错误 #语法错误抑制不了。 异常错误:在代码语法正确的前提下,程序报错就是异常 #异常错误可以抑制 阅读详情

相关推荐

Python 异常 (Exception) 深度解析

Python异常处理指南摘要 本文系统介绍了Python异常处理机制,包含基础用法和进阶技巧。主要内容:1)异常原理:详述触发、捕获、处理流程;2)基础操作:包括try-except结构、手动抛出异常和异常链;3)高级应用:自定义异常类、上下文管理器结合异常处理、异常装饰器实现重试机制;4)最佳实践:强调精确捕获、资源清理、异常转换和性能优化,指出异常处理不当会导致10-100倍性能损耗。文中配有完整代码示例,如自定义NetworkTimeoutError异常、数据库连接上下文管理等,并提供了异常处理与条件

The @MMiL algoDves & programming space 1902

Python——异常处理

讲述了Python异常处理机制、内置异常类的结构、异常处理的语法结构、异常的检测与处理方法、自定义异常类的定义与使用方法、with语句与断言的使用方法。

m0_65639340的博客 1万+

掌握Python异常处理:优雅地终止程序

本文深入探讨了在Python编程中进行异常处理的重要性以及如何实施。通过一个实际的项目启动报告意外中断的例子,说明了为什么需要异常处理。文章详细介绍了Python中的异常层次结构,并强调了自定义异常处理的必要性,包括使用try-except块来优雅地终止程序,并给出了相应的代码示例。此外,本文还讨论了在try-except控制流中代码执行的流程,异常信息的打印,以及使用多个except块来处理不同类型的异常。

weixin_36328210的博客 389

Python之异常处理语句

一起来学习Python中的异常语句(我是小菜鸡,一起努力,咱们顶峰相见!!!)

精益求精,永无止境,永远在路上! 1万+

tree_sitter多语言解析器配置实战指南

本文是一份详细的Tree-sitter多语言解析器配置实战指南。文章从零开始,手把手指导如何搭建Python环境、安装指定版本的tree-sitter库、下载并编译多种语言的语法规则,最终构建一个统一的解析器库。通过实战代码演示了如何初始化解析器、解析代码并遍历语法树,旨在帮助开发者高效处理多语言代码分析任务,并分享了高级技巧与常见问题排坑经验。

weixin_29245767的博客 267

WRF-CHEM 新手向实践(四):化学初始/边界场及namelist设置

这是这个系列的最后一节了,这些经验是自己作为一个半路出家的外行一步步摸索出来的,其中不免有很多理解不到位的地方,但也正是如此,我相信这是目前新手入门wrf-chem最友好的教程之一,希望能对大家有实质性的帮助。本节继续未完成的内容。在mozbc生成化学初始和边界条件之前,还需要先在wrfinput文件中开启化学部分。

qq_42335815的博客 4633

Python 异常处理及程序调试详解

Python异常处理及程序调试详解

燕鹏 1003

UE5 SplineMesh与StaticMesh性能对比:生成1000米路径的帧率与内存实测

本文深度对比了UE5中SplineMesh与StaticMesh在生成1000米路径时的性能差异,包括帧率、内存占用及实现复杂度。实测数据显示,SplineMesh在Draw Call优化和动态变形场景中表现更优,而StaticMesh适合需要复杂材质变化的场景。文章还提供了优化技巧和选型指南,帮助开发者根据项目需求做出科学决策。

weixin_33976326的博客 315

python关于程序的异常处理_Python 异常处理

python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。高佣联盟www.cgewang.com你可以使用该功能来调试python程序。异常处理: 本站Python教程会具体介绍。断言(Assertions):本站Python教程会具体介绍。python标准异常异常名称描述BaseException所有异常的基类SystemExit解释器请求退出KeyboardInte...

weixin_42531128的博客 150

工业级实战:C#上位机集成YOLO实现多目标跟踪(含数据库存储+报表导出)

推理核心:ONNX Runtime实现C#直接推理YOLO模型,GPU优先+CPU降级适配工业机;跟踪核心:SORT算法轻量级实现多目标跟踪,保证工业场景实时性与稳定性;数据核心:MySQL存储+本地缓存,Excel报表标准化导出,满足工业数据追溯与质检需求;部署核心:模型优化、GPU加速、开机自启,保证工业级7x24小时运行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 473

机器学习kaggle报告-Facial Keypoints Detection【完整解题过程+代码】

在处理面部关键点检测任务时,首先需要将存储在 CSV 文件中的图像数据转换为可以显示和分析的图像。数据集中每个图像是以一个一维数组的形式存储,其中包含了图像的所有像素值。为了将这些数据转化为实际的图像,我们需要按照一定的规则将这些像素值重新排列为一个二维矩阵(即图像的行列)。下面是一个案例,展示了如何将数据集中的图像数据转化为图片。转化过程读取CSV文件:首先,我们需要读取包含图像数据的 CSV 文件,通常该文件包含多张图像的像素值。每一行表示一张图像,并且包含图像的像素值列表。提取图像数据。

一键难忘的博客 3350

【自动化运维】Python异常处理与程序调试

异常处理是程序用于处理以外情况的代码段,而在代码编写的过程中,经常要进行代码的调试和测试工作。本章将介绍 Python 语言中的异常处理和程序调试的具体使用方法。

weixin_73059729的博客 1189

芒果YOLOv7改进04:Loss篇:原创改进损失函数Repulsion:独家首发最新改进Repulsion Loss解决目标遮挡场景下检测,为解决密集人群检测中遮挡设计的损失函数,打造高效检测器涨点

YOLOv7原创改进Repulsion|首发最新改进为解决密集人群检测中遮挡设计的损失函数

包括YOLOv5、YOLOv7、YOLOv8等模型改进 3249

python程序调试和异常处理

程序异常 有时程序错误称为程序异常,相信每一位写程序的人一定会碰上程序错误,过去碰上这类情况将终止执行,同时出现错误信息,错误信息内容通常显示Traceback,然后列出异常报告。Python提供的功能可以让我们捕捉异常和撰写异常处理程序,当发生异常时被我们捕捉到则会去执行异常处理程序,然后程序可以继续执行。 设计一个程序异常 以一个除数为0的错误开始说明。 实例1 例子:def division(x,y): return x / y ...

weixin_62313265的博客 3693

用python画带有正负值的条形图

常见的条形图只能表现数据的大小,却不能表现值的正负关系。但是其实仅仅使用`pandas`和`matplotlib`两个包就可以实现y轴负轴的添加以及负值的显示,并且可以为正负值分别设置不同的颜色,让条形图看上去更加清晰,易于我们分析

weixin_44853840的博客 5382

【图像去噪】论文精读:AKDT: Adaptive Kernel Dilation Transformer for Effective Image Denoising

论文题目:AKDT: Adaptive Kernel Dilation Transformer for Effective Image Denoising —— AKDT:用于有效图像去噪的自适应核膨胀Transformer图像去噪是一项基本但具有挑战性的任务,特别是在处理高分辨率图像和复杂的噪声模式时。大多数现有方法依赖于标准的 Transformer 架构,该架构通常计算复杂度高,并且对不同噪声水平的适应性有限。在本文中,我们介绍了自适应核膨胀Transformer(AKDT)

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1044

Python基础之程序的异常处理

本文介绍了Python异常处理的核心知识,包括异常概念、分类和处理方法。异常是指程序运行时的非预期情况,分为内置异常(如ZeroDivisionError、IndexError等)和自定义异常。异常处理使用try-except结构,支持单异常、多异常和未知异常捕获,还可配合else和finally执行不同逻辑。文章还讲解了raise抛出异常、异常传递机制,以及如何在不同层级处理异常。通过系统学习这些内容,开发者可以编写更健壮的代码,提高程序稳定性。

jalja_365的博客 979

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Python 异常处理及程序调试

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

billy的博客 1955

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python程序设计之异常处理(1)

1.异常处理 ①异常指程序运行时引发的错误,可以使用异常处理结构来提高程序的健壮性和容错性;也可以为用户提供更加友好的提示; ②注意:编程应该避免过多依赖于异常处理机制来提高程序的健壮性; ③注意:如果异常没有被捕捉或者出现在else/finally语句块中会在finally语句之后被抛出; 2.代码演示: ①使用继承Python内置的异常类来实现自定义类的错误处理 class myError(E...

QinHsiu的博客 989

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

暑假Python基础整理 --异常处理及程序调试

本文介绍了Python中的异常处理与程序调试方法。首先列举了常见异常类型如NameError、IndexError等及描述。重点讲解了异常处理语句:try-except用于捕获处理异常,可组合else和finally语句;raise用于主动抛出异常。在程序调试部分,详细说明了使用IDLE调试器的步骤,包括断点设置、变量查看和调试按钮功能。还介绍了assert语句的条件验证调试方法。这些技巧能帮助开发者有效定位和处理程序错误,提高代码质量。

2401_86544210的博客 700

程序异常处理——python

总有一些不足之处

qq_43657620的博客 254

Python的异常处理及程序调试

Python的异常处理及程序调试 我们都知道在学习C语言或者Java中,编译器可以捕获很多语法错误,但是在Python中,只有在程序运行后才会执行语法检查。所以,只有在运行或测试程序时,才会真正知道该程序能不能正常运行,因此,掌握一定的异常处理语句和程序调试方法是十分必要的。 ①了解什么是异常 ②掌握如何使用try…execpt语句捕获异常 ③掌握try…execpt…else语句的应用 ④掌握t...

wwjvictor 822

Python程序控制结构概述及异常处理

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 Python免费学习资料、代码以及交流解答点击即可加入 1、程序控制结构概述 基础程序控制结构有三种,顺序结构、分支结构、循环结构。任何程序都以这三种结构为基础。 顺序结构就是程序以单线性顺序从开头至末尾依次执行的结构,中间没有任何的选择分支和循环部分。顺序结构是最简单的程序控制结构。 分支结构就是在一段..

【优快云官方推荐】 566

[Python] 程序的异常处理

异常处理的详细解析,欢迎来瞧一瞧

一以贯之的努力 不得懈怠的人生 3135

Python中程序的异常处理

python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 1、Python中的标准异常对照 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit 生成器(generator)发生异常来通知

weixin_44088154的博客 548
上一篇: Python实现字符串反转的6种方法
下一篇: python中第三方库xlrd和xlwt的使用教程
Python程序u猿
博客等级 码龄5年 622粉丝 84原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值