0

0

Python异常捕获和处理的方法是什么

WBOY

WBOY

发布时间:2023-05-22 23:37:17

|

2250人浏览过

|

来源于亿速云

转载

1 | 语法错误

指解析代码时出现的错误。当代码不符合python 语法规则时,python解释器在解析时就会报出 syntaxerror 语法错误,与此同时还会明确指出最早探测到错误的语句。例如:

print "Hello,World!"

我们知道,Python 3.0已不再支持上面这种写法,所以在运行时,解释器会报如下错误:

SyntaxError: Missing parentheses in call to 'print'

语法错误多是开发者疏忽导致的,属于真正意义上的错误,是解释器无法容忍的,因此,只有将程序中的所有语法错误全部纠正,程序才能执行。

2 | 运行时错误

运行时错误,即程序在语法上都是正确的,但在运行时发生了错误。例如:

a = 1/0

上面这句代码的意思是“用 1 除以 0,并赋值给 a 。因为0 作除数是没有意义的,所以运行后会产生如下错误:

立即学习Python免费学习笔记(深入)”;

Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: division by zero

3 |其他异常

以上运行输出结果中,前两段指明了错误的位置,最后一句表示出错的类型。在 Python 中,把这种运行时产生错误的情况叫做异常(Exceptions)

这种异常情况还有很多,常见的几种异常情况如下表:

异常类型 含义 实例
AssertionError 当 assert 关键字后的条件为假时,程序运行会停止并抛出此异常

>>> assert 1>0

>>> assert 1<0

AssertionError

AttributeError 当试图访问的对象属性不存在时,抛出的异常

>>> s="hello"

>>> s.len

AttributeError: 'str' object has no attribute'len'

IndexError 索引超出序列范围,会引发此异常

>>> s="hello"

>>> s[5]

IndexError: string index out of range

KeyError 字典中查找一个不存在的关键字时,引发此异常

>>> demo_dict={"age": 20}

>>> demo_dict["name"]

KeyError: 'name'

NameError 尝试访问一个未声明的变量时,引发此异常

>>> hello

NameError: name 'hello' is not defined

TypeError 不同类型数据之间的无效操作

>>> 1+"2"

TypeError: unsupported operand type(s) for +: 'int' and 'str'

ZeroDivisionError 除法运算中除数为 0 引发此异常

>>> a = 1/0

ZeroDivisionError: division by zero

小羊标书
小羊标书

一键生成百页标书,让投标更简单高效

下载

4 | 异常处理

程序运行时出现异常,目的并不是让我们的程序直接终止!Python是希望在出现异常时,我们可以编写代码来对异常进行处理!

Python 提供了try except语句捕获并处理异常,该异常处理语句的基本语法结构如下:

try:
    # 可能产生异常的代码块
except [(Error1, Error2, ...) [as e]]:
    # 处理异常的代码块1
except [(Error3, Error4, ...) [as e]]:
    # 处理异常的代码块2

该格式中,[ ] 括起来的部分可以使用,也可以省略。其中各部分的含义如下:

  • (Error1, Error2,...) 、(Error3, Error4,...):其中,Error1、Error2、Error3 和Error4 都是具体的异常类型。显然,一个 except 块可以同时处理多种异常。

  • [as e]:作为可选参数,表示给异常类型起一个别名 e,这样做的好处是方便在except 块中调用异常类型(后续会用到)。

  • [Exception]:作为可选参数,可以代指程序可能发生的所有异常情况,其通常用在最后一个 except 块。

  • 注:except 后面也可以不指定具体的异常名称,这样的话,表示要捕获所有类型的异常。

另外,从 try except 的基本语法格式可以看出,try 代码块仅有一个,但except 代码块可以有多个,这是为了针对不同的异常类型提供不同的异常处理方式。当程序发生不同的意外情况时,会对应不同的异常类型,Python 解释器就会根据该异常类型来决定使用哪个 except 块来处理该异常。

try except 语句的执行流程如下:

1、首先执行 try 中的代码块,如果执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给 Python 解释器,此过程称为捕获异常。

2、当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,如果找到合适的 except 块,则把该异常对象交给该 except 块处理,这个过程被称为处理异常。如果 Python 解释器找不到处理异常的 except 块,则程序运行终止,Python 解释器也将退出。

异常处理例子:

try:
    a = int(input("输入被除数:"))
    b = int(input("输入除数:"))
    c = a / b
    print("您输入的两个数相除的结果是:", c )
except (ValueError, ArithmeticError):
    print("程序发生了数字格式异常、算术异常之一")
except :
    print("未知异常")
print("程序继续运行")

程序运行结果为:

输入被除数:a程序发生了数字格式异常,算术异常之一程序继续运行

上面程序中,第 6 行代码使用了(ValueError, ArithmeticError)来指定所捕获的异常类型,这就表明该 except 块可以同时捕获这 2 种类型的异常;第 8 行代码只有 except 关键字,并未指定具体要捕获的异常类型,这种省略异常类的 except 语句也是合法的,它表示可捕获所有类型的异常,一般会作为异常捕获的最后一个 except 块。除此之外,由于 try 块中引发了异常,并被 except 块成功捕获,因此程序才可以继续执行,才有了“程序继续运行”的输出结果。

通过在try块后提供多个except块可以无须在异常处理块中使用if判断异常类型,但依然可以针对不同的异常类型提供相应的处理逻辑,从而提供更细致、更有条理的异常处理逻辑。

事实上,不管程序代码块是否处于 try 块中,甚至包括 except 块中的代码,只要执行该代码块时出现了异常,系统总会自动生成一个 Error 对象。如果程序没有为这段代码定义任何的 except 块,则 Python 解释器无法找到处理该异常的 except 块,程序就会停止运行;反之,如果程序发生异常,并且该异常经 try 捕获并由 except 处理完成,则程序会继续执行。

5 | 获取特定异常的有关信息

每种异常类型都提供了如下几个属性和方法,通过调用它们,就可以获取当前处理异常类型的相关信息:

  • args:返回异常的错误编号和描述字符串;

  • str(e):返回异常信息,但不包括异常信息的类型;

  • repr(e):返回较全的异常信息,包括异常信息的类型。

try:
    result=20/int(input("请输入除数:"))
    print(result)
except ValueError:
  print("必须输入整数")
except ArithmeticError:
  print("算数错误,除数不能为 0")
else:
    print("没有出现异常")
print("继续运行")

程序运行结果为:

输入被除数:210没有出现异常继续运行

6 |finally语句

Python 异常处理机制还提供了一个 finally 语句,用来为 try 块中的程序做扫尾清理工作。

在整个异常处理机制中,finally 语句的功能是:无论 try 块是否发生异常,最终都要进入 finally 语句,并执行其中的代码块。

finally 示例:

try:
    a=20/int(input("请输入 a 的值:"))
    print(a)
except:
  print("发生异常")
else:
  print("执行 else 代码块")
finally:
    print("执行 finally 代码块")

finally 代码块的强大还远不止此,即便当 try 块发生异常,且没有合适和except 处理异常时,finally 块中的代码也会得到执行。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1051

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

493

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

382

2023.10.25

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

69

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号