Python教学 | 有备无患!详解 Python 异常处理(try-except)

这篇具有很好参考价值的文章主要介绍了Python教学 | 有备无患!详解 Python 异常处理(try-except)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

更多详情请点击查看原文:Python教学 | 有备无患!详解 Python 异常处理(try-except)

Python教学专栏,旨在为初学者提供系统、全面的Python编程学习体验。通过逐步讲解Python基础语言和编程逻辑,结合实操案例,让小白也能轻松搞懂Python!
>>>点击此处查看往期Python教学内容

本文目录

引言

一、关于异常

二、try-except 用法

三、哪些情况下需要使用 try-except ?

  1. 使用易报错函数时

  2. 使用网络请求数据时

  3. 分批处理大数据集时

  4. ……

四、异常处理注意事项

总结

相关推荐

本文共5707个字,阅读大约需要15分钟,欢迎指正!

引言

无论是数据清洗、转换还是分析,我们都需要确保程序能够稳定地运行,避免数据处理过程中的意外中断。使用 Python 处理大数据集或执行循环程序时,程序异常可能会给我们带来一系列的麻烦,而 Python 解释器一旦遇到异常,就会立即中断程序,其中的原因包括但不限于文件不存在、网络连接中断、数据格式错误、数据内部问题等。

如果我们不希望个别小问题影响整个程序的正常运行,那么就可以使用 Python 的异常处理语句:try-except 。它能够帮助我们略过程序的异常部分或者针对不同类型的异常采取不同的应对措施,保障程序不被未知异常中断。

一、关于异常

异常是我们常说的“报错”,宏观上分为两类,一类是语法错误(SyntaxError),另一类是程序异常(Exception)。无论是语法错误还是程序异常,只要触发,程序就会立刻停止运行。

针对程序异常来说,又分为多种异常,数据处理中常见的异常有以下几种:

  1. KeyError(键错误):当试图访问字典中不存在的键时引发的异常。

  2. ValueError(值错误):当传递给函数的参数类型正确但值不合法时引发的异常。

  3. TypeError(类型错误):当使用不兼容的类型进行操作或函数调用时引发的异常。

  4. FileNotFoundError(文件未找到错误):当试图打开不存在的文件时引发的异常。

  5. IndexError(索引错误):当使用无效的索引访问序列(如列表、元组或字符串)时引发的异常。

  6. OverflowError(溢出错误):当数值运算结果超出了所能表示的范围时引发的异常。

  7. AttributeError(属性错误):当试图访问对象不存在的属性时引发的异常。

  8. UnicodeError(Unicode 错误):当处理字符串时遇到 Unicode 编码相关的错误时引发的异常。

  9. IOError(输入输出错误):当发生与输入输出相关的错误时引发的异常,如读取或写入文件失败。

二、try-except 用法

try-except是一个组合语句,书写格式类似于if-else语句,但又有很大的不同。if关键字可以单独出现,代表单分支结构,但tryexcept必须一起使用,缺一不可。try-except的基本结构如下:

try:
    <代码块1>
except:
    <代码块2>

上述结构中,<代码块1>中一般是一些容易“报错”的代码,如果<代码块1>中的代码能够正常运行,那么程序就会逃过<代码块2>去执行后续的其他代码;而<代码块2>中的代码一般是<代码块1>错时的应对措施。总的来说,如果<代码块1>能正常运行,那么皆大欢喜;但如果<代码块1>中的代码出现异常,那么程序就会执行<代码块2>中的代码,而不是直接报错和终止程序。(如果<代码块2>中的代码是 pass,则代表忽略这个异常。)

以上是try-except语句的基本结构,也是最常用的结构,简单粗暴易懂。但当程序变得复杂时,可能就需要更加精准地针对不同类型的异常实施不同的解决方案,这种更复杂的异常处理结构如下:

try:
    <代码块1>
except 异常类型1:
    <代码块2>
except 异常类型2:
    <代码块3>
except 异常类型3:
    <代码块4>
    ……
except Exception:
    <代码块N>

这种结构可以对指定的异常类型分配不同的处理方式,当<代码块1>中出现异常类型1时,程序就会执行<代码块2>,当<代码块1>中出现异常类型2时,程序就会执行<代码块3>……如果抛出的异常类型不属于任何一种已写明的异常,那么都会被归入异常类基类 Exception 中,进而执行<代码块N>

除此之外,try-except还有一些其他结果,包括try-except-elsetry-except-else-finally。这些结果能够实现更多异常处理功能,让代码结构更加清晰,但笔者认为上述两种结果已经足够帮助我们解决 99% 的实际问题了,所以本文就不再对这两种结构多做介绍。

三、哪些情况下需要使用 try-except ?

1. 使用易报错函数时

在使用 OCR 技术识别表格时,得到的表格中,每个单元格中的值都是字符串,因我们需要将存放数值的单元格内容转为数字类型,这就要用到 Python 内置函数 eval()。但是 OCR 识别结果可能会出现少许错误,例如原始数据中的数字 “3.15” 被识别为 “3·15”,那么这个数字就无法被 eval() 函数转为数字,进而抛出异常(eval 函数遇到无法转换的字符时会直接报错而不是返回其他值)。如果我们在转换类型时不希望个别异常数据打断程序的正常运行,那么我们就可以编写一个函数来进行转换,这个函数的功能是,如果输入的字符串可以被转为数字,那么就返回转化结果,如果不可以被转换,那么就输出提示性文字并返回特殊标记,后续再人工核查。

def try_eval(Str):
    try:
        # 尝试直接返回转换后的值
        return eval(Str)
    except:
        # 若无法正常转换,输出提示文字并返回特殊标记
        print(f'输入值【{Str}】无法被正常转换')
        return '--'

因此在应用转换函数时使用优化后的函数,就可以避免程序频繁报错。

2. 使用网络请求数据时

很多时候我们需要使用 Python 从网站或服务器中获取数据,例如在采集数据或调用网络服务 API 时。笔者在使用高德地图或者百度地图的地理服务 API 时,请求数据的函数中一般都会使用多层try-except 来规避程序报错。

def revfunc(df):
    lng = df['LNG1']
    lat = df['LAT1']
    if lng != '':
        # 若 经纬度 不为空
        GD_inv = GD.regeocode_by_lonlat(lng, lat)
        try:
            # 若返回状态正常
            if GD_inv['status'] == '1'
                try:
                    # 根据经纬度返回省份、地市、区县、行政区划代码
                    return GD_inv['regeocode']['addressComponent']['province'],\
                           GD_inv['regeocode']['addressComponent']['city'],\
                           GD_inv['regeocode']['addressComponent']['district'],\
                           GD_inv['regeocode']['addressComponent']['adcode']
                except:
                    return '','','',''
            else:
                return '','','',''
        except:
            return '','','',''
    else:
        # 若 经纬度 为空
        return '','','',''

因为这些程序在运行时不仅需要稳定的网络环境,还对输入值有着较为严格的要求,所以出现异常的几率非常之高。因此我们可以使用异常处理结构增加程序稳定性。

3. 分批处理大数据集时

使用 Python 大数据集时,由于计算机(运行)内存空间不足以装载整个数据集,往往需要分批处理,将数据集分成 N 个数据块,每次处理一块数据。如果数据集非常大,同时处理步骤也比较复杂,那么整个程序可能要持续运行数个小时,这就对程序的稳定性有着非常高的要求。如果某个数据块中出现异常数据导致程序中断,我们可能不会立即察觉,后续要重新启动程序,费时费力。在这种情况下,也建议大家使用异常处理结构,防止异常造成程序中断。当然,在此情况下我们还需要做好异常应对策略,不能完全忽略异常的发生,因为这很可能让我们丢失数据。

4. ……

如果您觉得数据处理时还有某些场景比较依赖try-except,欢迎在留言区留言分享。

四、异常处理注意事项

在使用try-except语句时,不能在所有情况下都使用忽略异常这个思路。尤其是在分批处理大数据集时,如果一个数据块在被处理时发生异常,尽管其有着异常处理的代码,但最终这个数据块可能还是没有被成功处理。所以我们一定要在except语句下编写合适的应对代码,例如遇到无法处理的数据块时,先将其单独保存下来,待大部分数据处理完成后,再对这些问题数据进行单独操作。

不仅如此,有些时候我们还需要记录详细的报错信息,并使用日志库将其记录下来,事后分析异常原因,防止后续再次踩坑。

总结

💡Python的异常处理语句try-except提供了一种有效的方式来处理代码中可能出现的异常情况。通过正确地使用try-except,我们可以提高代码的健壮性和可靠性,避免程序崩溃,并且更好地掌控程序流程。同时,我们也应该注意异常处理的细节和注意事项,以保证我们的代码在出现异常时能够正确地响应和处理。

如果你想学习各种 Python 编程技巧,提升个人竞争力,那就加入我们的数据 Seminar 交流群吧,欢迎大家在社群内交流、探索、学习,一起进步!同时您也可以分享通过数据 Seminar 学到的技能以及得到的成果。

相关推荐

Python 教学

  • Python 教学 | 学习 Python 第一步——环境安装与配置

  • Python 教学 | Python 基本数据类型

  • Python 教学 | Python 字符串操作(上)

  • Python 教学 | Python 字符串操作(下)

  • Python 教学 | Python 变量与基本运算

  • Python 教学 | 组合数据类型-列表

  • Python 教学 | 组合数据类型-集合(内含实例)

  • Python 教学 | 组合数据类型 - 字典&元组

  • Python 教学 | Python 中的分支结构(判断语句)

  • Python 教学 | Python 中的循环结构(上)

  • Python 教学 | Python 中的循环结构(下)

  • Python 教学 | Python 函数的定义与调用

  • Python 教学 | Python 内置函数

  • Python 教学 | 最常用的标准库之一 —— os

  • Python 教学 | 盘点 Python 数据处理常用标准库

  • Python 教学 | “小白”友好型正则表达式教学(一)

  • Python 教学 | “小白”友好型正则表达式教学(二)

  • Python 教学 | “小白”友好型正则表达式教学(三)

  • Python 教学 | 数据处理必备工具之 Pandas(基础篇)

  • Python 教学 | 数据处理必备工具之 Pandas(数据的读取与导出)

  • Python 教学 | Pandas 数据索引与数据选取

  • Python 教学 | Pandas 妙不可言的条件数据筛选

  • Python 教学 | Pandas 缺失值与重复值的处理方法

  • Python 教学 | Pandas 表格数据行列变换

  • Python 教学 | Pandas 表格字段类型精讲(含类型转换)

  • Python 教学 | Pandas 数据合并(含目录文件合并案例)

  • Python 教学 | Pandas 数据匹配(含实操案例)

  • Python 教学 | Pandas 函数应用(apply/map)【上】

  • Python 教学 | Pandas 函数应用(apply/map)【下】

  • Python 教学 | Pandas 分组聚合与数据排序

  • Python 教学 | Pandas 时间数据处理方法

  • Python 教学 | 列表推导式 & 字典推导式

  • Python 教学 | 一文搞懂面向对象中的“类和实例”

  • Python 教学 | Python 学习路线+经验分享,新手必看!

  • Python 教学 | 解密 Windows 中的 Path 环境变量

Python实战

  • Python实战 | 如何使用 Python 调用 API

  • Python 实战 | 使用正则表达式从文本中提取指标

  • 大数据分析 | 用 Python 做文本词频分析

  • 数据治理 | 从“今天中午吃什么”中学习Python文本相似度计算

  • 数据治理 | 省下一个亿!一文读懂如何用python读取并处理PDF中的表格(赠送本文所用的PDF文件)

  • 数据治理 | 还在人工识别表格呢?Python 调用百度 OCR API 又快又准

  • 数据治理 | 如何用 Python 批量压缩/解压缩文件

  • 案例分享:使用 Python 批量处理统计年鉴数据(上)

  • 案例分享:使用 Python 批量处理统计年鉴数据(下)

  • Python 实战 | ChatGPT + Python 实现全自动数据处理/可视化

  • ChatGPT在指尖跳舞: open-interpreter实现本地数据采集、处理一条龙

  • Python 实战 | 文本分析之文本关键词提取

  • Python 实战 | 文本分析工具之HanLP入门

  • Python 实战 | 进阶中文分词之 HanLP 词典分词(上)

  • Python 实战 | 进阶中文分词之 HanLP 词典分词(下)

  • Python实战 | 文本文件编码问题的 Python 解决方案

  • Python 实战 | 从 PDF 中提取(框线不全的)表格

数据可视化

  • 数据可视化 | 讲究!用 Python 制作词云图学问多着呢

  • 数据可视化 | 地址数据可视化—教你如何绘制地理散点图和热力图

  • 数据可视化 | 太酷了!用 Python 绘制3D地理分布图

  • 数据可视化 | 用 Python 制作动感十足的动态柱状图

  • 数据可视化 | Python绘制多维柱状图:一图展示西部各省人口变迁【附本文数据和代码】

  • 数据可视化 | 3D 柱状图一览各省农民合作社存量近十年变化文章来源地址https://www.toymoban.com/news/detail-856596.html

到了这里,关于Python教学 | 有备无患!详解 Python 异常处理(try-except)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言自定义类型详解(保姆级教学)

    目录 1.结构体 1.1结构体的介绍 1.2结构体的声明 1.3特殊声明(匿名结构体类型) 1.4结构体自引用 1.5结构体变量的定义和初始化 1.6结构体内存对齐 1.7修改默认对其数 2.位段 2.1什么是位段 2.2位段的内存分配 3.枚举 3.1枚举的定义 3.2枚举的优点 4.联合体(共用体) 4.1联合体类型

    2024年02月16日
    浏览(35)
  • 头歌实践教学平台Python-列表类型翻转教学

    第1关 输入数据创建列表 第2关 计算每位选手的成绩 第3关 去除一个最高分和一个最低分 第4关 计算中位数成绩 第5关 去除弃权评委成绩 第6关 将平均成绩附加到列表末尾 第7关 读文件到二维列表 第8关 二维列表数据分析 第9关 成绩排序

    2024年04月26日
    浏览(53)
  • 零基础教学必会篇(详解字符函数和字符串函数)(一)

    各位csdn的友友们好,相信大家在编程道路上肯定会遇见一些非常重要的函数,它们贯穿我们整个编程,所以我们必须认识、掌握并熟练运用它们,这对于我们之后的编程将会有很大的帮助,今天阿博就带领大家拿捏它们🤗🤗🤗 1.strlen的功能介绍 这里我们在cplusplus上查看一

    2023年04月25日
    浏览(58)
  • Python教学|Python验证码识别

    在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类: 1、计算验证码 2、滑块验证码 3、识图验证码 4、语音验证码 这篇博客主要写的就是识图验证码,识别的是简单的验证码,要想让识别率更高,识别的更加准确就需要花很多

    2024年02月12日
    浏览(80)
  • 正则表达式详解(零基础教学,手把手教你写正则)

    本篇文章将从零讲解什么是正则表达式,以及正则表达式的规则、在python中的应用,用通俗易懂的描述方式进行零基础级别的讲解,尽量做到全网最全讲解,力求最高质量文章,欢迎关注!点击目录可直接进行相关位置跳转。 目录: 什么是正则? 为什么需要正则? 元字符

    2023年04月08日
    浏览(41)
  • APP开发教学:开发同城O2O外卖跑腿系统源码详解

    同城O2O外卖跑腿系统,满足了人们对于外卖送餐和生活服务的需求。今天,小编将为您讲解如何开发同城O2O外卖跑腿系统源码。 1.前期准备 首先,我们需要明确系统的功能需求和用户需求,包括外卖订购、配送员接单、支付功能等。其次,需要选择合适的开发平台和技术栈,

    2024年04月14日
    浏览(54)
  • C/C++之分文件写静态通讯录详解(保姆级教学)

    个人主页:点我进入主页 专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶 C语言刷题 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1. 前言 2.主函数 3.增加函数   4.位置查找函数 5.删除函数  6.查找函数  7. 修改函数

    2024年02月07日
    浏览(33)
  • ⚡【C语言趣味教程】(1) 深入浅出 HelloWorld | 通过 HelloWorld 展开教学 | 头文件详解 | main 函数详解

      🔗 《C语言趣味教程》👈 猛戳订阅!!! 💭 写在前面: 这是一套 C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出 \\\"有趣的干货\\\" !

    2024年02月13日
    浏览(58)
  • 【C语言趣味教程】(1) 深入浅出 HelloWorld:通过 HelloWorld 展开教学 | 头文件详解 | main 函数详解

      🔗 《C语言趣味教程》👈 猛戳订阅!!! 💭 写在前面: 这是一套 C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出 \\\"有趣的干货\\\" !

    2024年02月15日
    浏览(55)
  • ⚡【C语言趣味教程】(1):深入浅出 HelloWorld | 通过 HelloWorld 展开教学 | 头文件详解 | main 函数详解

      🔗 《C语言趣味教程》👈 猛戳订阅!!! 💭 写在前面: 这是一套 C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出 \\\"有趣的干货\\\" !

    2024年02月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包