0

0

python中异常有哪些?python中异常的详细介绍

不言

不言

发布时间:2018-09-26 15:54:31

|

3201人浏览过

|

来源于php中文网

原创

本篇文章给大家带来的内容是关于python中异常有哪些?python中异常的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

python的异常分为两种,1)、语法错误,在python解释器的语法检测中不通过不能运行代码    2)、异常,python程序运行期检测到的错误被称为异常。在没有做异常处理时,将终止程序并提示异常信息,如:①字符串转换为数字时的类型转换异常,②文件读取时的文件不存在异常,③网络链接时主机不可达异常···等。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。毕竟谁也不希望用着的程序突然的就崩了

1、语法错误

python的语法错误是很多初学者经常遇到的一个问题,这类错误比较低级,只要多敲几遍代码就可以减少这样的错误

>>> if Trur
  File "", line 1
    if Trur
          ^
SyntaxError: invalid syntax
>>> print("as"))
  File "", line 1
    print("as"))
               ^
SyntaxError: invalid syntax

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

如:出现这样的错误就是语法错误,第1行结尾if语句缺少 ":",第6行结尾多了 ")"

2、异常

1)运行期检测到的错误被称为异常,python的语法检测无法检查这样的错误。

>>> int("aa")
Traceback (most recent call last):
  File "", line 1, in 
ValueError: invalid literal for int() with base 10: 'aa'
>>> f = open("aaa.txt","r")
Traceback (most recent call last):
  File "", line 1, in 
FileNotFoundError: [Errno 2] No such file or directory: 'aaa.txt'

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

其中第1行,第5行都是出现异常的地方,看一下异常的输出信息,如下图

2)python的标准异常类

BaseException 为所有异常的基类,Exception 为常规错误的基类

其它python的异常类,就不再一一的述说,可以百度查看

3、异常处理

为了提高程序的健壮性,不让程序出现异常时出现崩溃的情况,在必要时需要进行异常处理

1)try-except:语句

①、最简单的异常处理语句如下,当try的语句块中有异常出现时,下边的的语句将不再执行(第3行),异常被except捕获,执行except中的语句块后继续向下执行程序(如第6行)。注:except后边不跟异常的类型,默认捕捉所有的异常

try:
    int("aaa")
    print("---aaa---")
except:
    print("出现异常-->英文字母不能转换为数字")
print("----------")
# 输出结果
出现异常-->英文字母不能转换为数字
----------

②、多分支异常,当我们需要捕获不同的异常时可以用多个except来实现,需要获取异常的信息可通过as 变量名得到异常的对象,如第7行

try:
    nu = int("100")
    print("转换后的值nu:", nu)
    i = 1 / 0
except ValueError:
    print("出现异常-->英文字母不能转换为数字")
except ZeroDivisionError as e:  # 通过 as 变量名 获取异常的对象
    print("出现异常-->除数不能为零")
    print("异常的提示信息-->", e)
except:
    pass
print("----------")


# 输出结果
转换后的值nu: 100
出现异常-->除数不能为零
异常的提示信息--> division by zero
----------

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

③、当我们需要将多个异常按相同的处理方式可以使用  except (ValueError, [ZeropisionError [, NameError]]):

Magician
Magician

Figma插件,AI生成图标、图片和UX文案

下载
try:
    i = 1 / 0
    nu = int("aa")
except (ValueError, ZeroDivisionError) as e:
    print(e)
except:
    pass
print("----------")


# 输出结果
division by zero
----------

2)try-except-else-finally 语句

①、当try-except-else-finally中出现了finally语句,不管是否出现异常finally语句块中的语句一定会执行,而else中的语句只有不出现异常是才会执行

出现异常时try-except-else-finally如下

try:
    i = 1 / 0
    print("没有出现异常i值", i)
except Exception as e:
    print("出现异常-->", e)
else:
    print("没有出现异常-->执行else")
finally:
    print("不管是否出现异常,这里的语句一定会被执行")


# 输出结果
出现异常--> division by zero
不管是否出现异常,这里的语句一定会被执行

没有出现异常时try-except-else-finally如下

try:
    i = 1 / 1
    print("没有出现异常i值", i)
except Exception as e:
    print("出现异常-->", e)
else:
    print("没有出现异常-->执行else")
finally:
    print("不管是否出现异常,这里的语句一定会被执行")


# 输出结果
没有出现异常i值 1.0
没有出现异常-->执行else
不管是否出现异常,这里的语句一定会被执行

②、try-except-else-finally还可以拆开使用,有三种形式 1)try-except-finally   2)try-except-else    3)try-finally。  这里就不展示代码了

4、异常的传递

在发生异常的语句中没有处理异常的语句,异常将向上层传递,直到遇到处理异常的语句,或python解释器终止程序

def test2():
    int("aa")

def test1():
    test2()

try:
    test1()
except Exception as e:
    print(e)
print("-----------")


# 输出结果
invalid literal for int() with base 10: 'aa'
-----------

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

如上test2中第2行出现异常,将向第5行调用test2的语句处传递,这里依旧没有异常处理语句,将继续往上层传递到第8行处被except捕获

5、抛出异常 raise

1)抛出python已定义的异常

通过raise 异常类型即可抛出一个异常,抛出的异常也会被except捕获到。如下边第4行

age = 500
try:
    if age < 0 or age > 200:
        raise ValueError("age范围0-200")
    print("age", age)
except ValueError as e:
    print("出现异常-->", e)
# 输出结果
出现异常--> age范围0-200

2)抛出自定义异常

抛出自定义异常首先得有个自定义的异常类,注:自定义的异常必须直接或间接的继承Exception基类

class MyException(Exception):  # 自定义异常类
    def __init__(self, msg):
        self.msg = msg


age = 500
try:
    if age < 0 or age > 200:
        raise MyException("age范围0-200")  # 抛出自定义异常
    print("age", age)
except MyException as e:
    print("出现异常-->", e)


# 输出结果
出现异常--> age范围0-200

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

当然自定义异常类也可以拥有许多的功能,就得看需求添加啦

 6、在异常处理中抛出异常 

 有某需求:当捕获到异常时处理完后想继续抛出异常.....

在except中用raise可以抛出当前异常

try:
    i = 1 / 0  # 异常的语句
except Exception as e:
    print("出现异常-->", e)
    raise  # 处理完后继续抛出异常,raise表示抛出当前异常
print("-------------")


# 输出结果
出现异常--> division by zero
Traceback (most recent call last):
  File "", line 2, in 
    i = 1 / 0
ZeroDivisionError: division by zero

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python 并发编程实战
Python 并发编程实战

共12课时 | 0.7万人学习

Go语言教程-全程干货无废话
Go语言教程-全程干货无废话

共100课时 | 9.6万人学习

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

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