返回顶部
首页 > 资讯 > 后端开发 > Python >#21 Python异常
  • 512
分享到

#21 Python异常

异常Python 2023-01-30 23:01:42 512人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

前言 运行程序时经常遇到各种错误,例如:ImportError(导入模块错误)、IndexError(索引错误)、NameError(变量错误)、SyntaxError(语法错误)、IndentationError(缩进错误)等,你或许有

前言

运行程序时经常遇到各种错误,例如:ImportError(导入模块错误)、IndexError(索引错误)、NameError(变量错误)、SyntaxError(语法错误)、IndentationError(缩进错误)等,你或许有许多疑问,为什么程序出现这个错误就会打印出相应的错误信息,自己是否可以编写一个错误呢?这些错误在python中其实是异常,正确的处理异常会让程序跑起来得心应手,那么怎么来处理异常呢?Here we Go

Python异常

1.1 异常的名词解释

异常其实是一个Python对象,当Python无法正常处理程序时,就会实例化这个对象,从而抛出异常(表示一个错误)

1.2 异常捕捉

当程序出现异常时,如果不处理则会终止程序的运行,如果不想在发生异常时终止程序,则需要使用try来捕捉它,先来看最简单的使用方法:

 1 name = 'MinuteSheep' # 初始化变量name
 2 print(name)   # 将变量name打印出来
 3 
 4 print(age)    # 将变量age打印出来,并没有初始化age,会抛出变量错误异常
 5 
 6 # 运行结果:
 7 MinuteSheep   # 正确打印出name变量
 8 Traceback (most recent call last):       # age变量抛出变量错误异常
 9   File "1.py", line 4, in <module>
10     print(age)   # 将变量age打印出来,并没有初始化age,会抛出变量错误异常
11 NameError: name 'age' is not defined
 1 name = 'MinuteSheep'
 2 print(name)
 3 
 4 try:    # 使用try捕捉异常
 5     print(age)
 6 except NameError:   # 当NameError出现时,执行下列代码块
 7     print('变量错误异常被捕捉')   
 8     print(NameError)
 9 
10 # 运行结果:
11 MinuteSheep
12 变量错误异常被捕捉
13 <class 'NameError'>
14 
15 # 可以看到当出现NameError时,并没有终止程序,而是执行出现异常时的代码块

从上面的代码可以看到,当开始执行一个try语句时,Python将会在当前程序的上下文做标记,当异常出现时,返回这里,执行异常时的代码块,当然也可以捕捉多个异常:

 1 Traceback (most recent call last):
 2 name = 'MinuteSheep'
 3 print(name)
 4 
 5 try:
 6     print(age)
 7 except NameError:
 8     print('我是NameError')
 9 except KeyError:
10     print('我是KeyError')
11 
12 
13 # 运行结果:
14 MinuteSheep
15 我是NameError

长上面代码可以看出,当有多个except语句时,会从第一个except语句开始匹配,如果匹配到则执行对于的代码块,剩下的except语句则不运行。多个异常的捕捉这样写会使代码变得冗长,为了简化代码也可以这样写:

 1 try:
 2     print(age)
 3 except (NameError, KeyError):   # 将所有异常放在一行一起处理
 4     print('异常被正确捕捉')
 5 
 6 
 7 # 运行结果:
 8 异常被正确捕捉
 9 
10 # 这样写可以使代码轻量化,但是缺点就是不能单独的处理每一个异常,只能一起处理

有时候需要将异常打印出来,但是异常通常是一个很长的单词,可以使用as给异常起别名:

 1 try:
 2     print(age)
 3 except NameError as e:   # 给异常起一个别名
 4     print('我是NameError')
 5     print(e)   # 将这个异常打印出来
 6 
 7 
 8 # 运行结果:
 9 我是NameError
10 name 'age' is not defined

1.3 异常的其他语法

其他语法一:

1 try:
2     try代码
3 except:
4     except代码
5 else:
6     else代码

解释:先执行try代码,当try代码出现异常时,执行except代码;当try代码没有异常时,执行else代码,看例:

 1 try:
 2     print(age)
 3 except NameError as e:
 4     print(e)
 5 else:
 6     print('没有出现异常哦')
 7 
 8 
 9 # 运行结果:
10 name 'age' is not defined
11 
12 # 出现异常,执行except代码块,不执行else代码块
 1 age = 100
 2 
 3 try:
 4     print(age)
 5 except NameError as e:
 6     print(e)
 7 else:
 8     print('没有出现异常哦')
 9 
10 
11 # 运行结果:
12 100
13 没有出现异常哦
14 
15 # 没有出现异常,则执行else代码块

其他语法二:

1 try:
2     try代码
3 except:
4     except代码
5 else:
6     else代码
7 finally:
8     finally代码

解释:不管是否有异常,最后都执行finally代码,看例:

 1 try:
 2     print(age)
 3 except NameError as e:
 4     print(e)
 5 else:
 6     print('没有出现异常')
 7 finally:
 8     print('最后都得执行我')
 9 
10 # 运行结果:
11 name 'age' is not defined
12 最后都得执行我

Python异常中,最常使用的就是try......except......,else和finally语句并不常见

1.4 异常种类

常见的异常种类:

SystemExit                   解释器请求退出
KeyboardInterrupt            用户中断执行(通常是输入^C)
StopIteration                迭代器没有更多的值
GeneratorExit                生成器(generator)发生异常来通知退出
StandardError                所有的内建标准异常的基类
ArithmeticError              所有数值计算错误的基类
FloatingPointError           浮点计算错误
OverflowError                数值运算超出最大限制
ZeroDivisionError            除(或取模)零 (所有数据类型)
AssertionError               断言语句失败
AttributeError               对象没有这个属性
EOFError                     没有内建输入,到达EOF 标记
EnvironmentError             操作系统错误的基类
IOError                      输入/输出操作失败
OSError                      操作系统错误
windowsError                 系统调用失败
ImportError                  导入模块/对象失败
LookupError                  无效数据查询的基类
IndexError                   序列中没有此索引(index)
KeyError                     映射中没有这个键
MemoryError                  内存溢出错误(对于Python 解释器不是致命的)
NameError                    未声明/初始化对象 (没有属性)
UnboundLocalError            访问未初始化的本地变量
ReferenceError               弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError                 一般的运行时错误
NotImplementedError          尚未实现的方法
SyntaxError                  Python 语法错误
IndentationError             缩进错误
TabError                     Tab 和空格混用
SystemError                  一般的解释器系统错误
TypeError                    对类型无效的操作
ValueError                   传入无效的参数
UnicodeError                 Unicode 相关的错误
UnicodeDecodeError           Unicode 解码时的错误
UnicodeEncodeError           Unicode 编码时错误
UnicodeTranslateError        Unicode 转换时错误
DeprecationWarning           关于被弃用的特征的警告
FutureWarning                关于构造将来语义会有改变的警告
OverflowWarning              旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning    关于特性将会被废弃的警告
RuntimeWarning               可疑的运行时行为(runtime behavior)的警告
SyntaxWarning                可疑的语法的警告
UserWarning                  用户代码生成的警告

可以看到上面这么多异常,怎么可以记得住啊!!!其实,Python中,所有异常都有一个共同的基类BaseException,它包含所有的异常,常规异常的基类是Exception

当不清楚会出现什么异常的时候,直接捕捉Exception基本上都是可以捕捉到的:

1 try:
2     print(age)
3 except Exception as e:   # 使用常规异常的基类
4     print(e)
5 
6 
7 # 运行结果:
8 name 'age' is not defined

1.5 主动出发异常

异常可以使用raise主动触发,看例:

1 try:
2     raise Exception('主动抛出异常')    # 使用raise主动触发异常
3 except Exception as e:
4     print(e)
5 
6 
7 # 运行结果:
8 主动抛出异常

1.6 自定义异常

Python中所有的异常的基类都是BaseException,常见的异常的基类是Exception,那么自己如果想要自定义异常的话,也要以BaseException或者Exception为基类(关于类的讲解以后会介绍到,这里先看一看)

class MSException(Exception):
    def __init__(self, content):
    ¦   self.content = content

    def __str__(self):
    ¦   return self.content


try:
    raise MSException('这是MinuteSheep自定义的异常')    # 抛出自定义异常
except Exception as e:
    print(e)


# 运行结果:
这是MinuteSheep自定义的异常

1.7 断言

这是一个新名词,断言是个什么鬼呢?断言是用来检测条件是否正确的。有这么一句话:与其让程序在运行时出错,不如让其出现错误条件时出错。断言语句的关键字为:assert

基本用法:assert 条件

当条件正确时,什么也不返回;当条件错误时,抛出AssertionError

In [5]: assert 9>5    # 条件正确时,什么也不返回

In [6]: assert 9<5   # 条件错误时,抛出AssertionError
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-6-739be7e04005> in <module>
----> 1 assert 9<5

AssertionError:

断言的错误可以自己填写,用法:assert 条件,'错误信息'

In [7]: assert 9<5, 'Error!!!!!'   # 自己填写错误信息
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-7-ea55b9c82b31> in <module>
----> 1 assert 9<5, 'Error!!!!!'

AssertionError: Error!!!!!

Python异常到此结束

 

--结束END--

本文标题: #21 Python异常

本文链接: https://lsjlt.com/news/181109.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • #21 Python异常
    前言 运行程序时经常遇到各种错误,例如:ImportError(导入模块错误)、IndexError(索引错误)、NameError(变量错误)、SyntaxError(语法错误)、IndentationError(缩进错误)等,你或许有...
    99+
    2023-01-30
    异常 Python
  • 2011-11-21 未捕获异常
    http://www.itpub.net/thread-1499223-17-1.html 167楼 下列哪些选项在执行之后会导致未捕获的异常: ORA-06502: PL/SQL:&nb...
    99+
    2024-04-02
  • 2011-10-21 自定义异常的捕获
    http://www.itpub.net/thread-1499223-7-1.html 70楼   下列的哪些程序块在执行之后会显示:"Trapped!"   注...
    99+
    2024-04-02
  • 异常--python异常处理
    --****--python 异常处理------------------------------------------------------------------------------****DB API中定义了一些数据库操作的错...
    99+
    2023-01-31
    异常 python
  • python 异常
    导航: 1、语法错误2、异常3、异常处理4、异常的传递5、抛出异常6、在异常处理中抛出异常   python的异常分为两种,1)、语法错误,在python解释器的语法检测中不通过不能运行代码    2)、异常,python程序运行期检测...
    99+
    2023-01-30
    异常 python
  • Python异常
      异常是一个事件,该事件会在程序执行过程中发生,将影响程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。...
    99+
    2023-01-31
    异常 Python
  • python 异常
    最长用到的异常处理的形式:try:    正常的操作except:    发生异常,执行这块代码else:    如果没有异常执行这块代码finally:    不管如何,最后一定要执行的代码try:    10/0except Excep...
    99+
    2023-01-31
    异常 python
  • python常用异常
    AttributeError:试图访问一个对象没有的属性,比如foo.x,但是foo没有属性xIOError:输入/输出异常;基本上就是无法打开文件ImputError:无法引入模块或包;基本上是路径问题或者名称错误IndentationE...
    99+
    2023-01-31
    异常 常用 python
  • Python 异常 Exception
    在Python的类中有很多方法的名字有特殊的重要意义。现在我们将学习__init__方法的意义。 __init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。注意,这个名称的开始和结尾...
    99+
    2023-01-31
    异常 Python Exception
  • 【Python学习21】Python中函
    今天学习了Python函数的用法,了解了使用Python如何定义一个函数。而且代码编写过程中也遇到了一些小小的错误,特此记录一下,以方便以后在遇到同样错误时能够快速找到问题的点。 # --coding: utf-8 -- # 定义4个简单的...
    99+
    2023-01-31
    Python
  • 浅谈python抛出异常、自定义异常, 传递异常
    一. 抛出异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行...
    99+
    2022-06-04
    异常 自定义 浅谈
  • Python 常见异常列表
    常见Python异常异常描述AssertionErrorassert(断言)语句失败AttributeError试图访问一个对象没有的属性,比如foo.x ,但是foo没有x这个属性。IOError输入/输出异常,基本上是无法打开文件。Im...
    99+
    2023-01-31
    异常 常见 列表
  • 21 Python的datetime模块
    概述         在上一节,我们介绍了Python的time模块,包括:time模块中一些常用的属性和函数。在这一节,我们将介绍Python的datetime模块。datetime模块属于Python的内置模块,提供了一种方便的方法来处...
    99+
    2023-09-29
    python datetime模块
  • 案例:python玩21点
    两个玩家,游戏开始先输入名字 用字典保存每个玩家信息:姓名,获胜次数 电脑随机产生2个数,每个玩家轮流猜1个数,与电脑随机两个数求和,最接近21的获胜 每轮结束显示玩家信息 按q退出游戏 import random user1 = in...
    99+
    2023-01-31
    案例 python
  • Python——异常处理
    文章目录 异常Python中的异常类捕获与处理异常自定义异常类with语句断言 异常 异常是在程序执行过程中发生的影响程序正常执行的一个事件。异常是Python对象,当Python无法...
    99+
    2023-09-04
    python 开发语言 pycharm
  • Python学习—异常
    一.异常处理的定义   python解释器检测到错误,触发异常(也允许程序员自己触发异常)   程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)   如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻...
    99+
    2023-01-31
    异常 Python
  • python Exception(异常处
    python异常:    python在运行时错误称为异常        语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译。        逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生成、计算或者出结果需要...
    99+
    2023-01-31
    异常 python Exception
  • Python 异常处理
    写一个命令分发器初步要求 : 程序员可以方便地注册函数到某一个命令, 用户输入命令时, 路由到注册的函数, 如果此命令没有对应的函数, 执行默认函数分析 : 输入命令映射到一个函数, 并执行这个函数, 应该是cmd_tbl[cmd] = f...
    99+
    2023-01-31
    异常 Python
  • Python -- 异常处理
    当一个小人物冲向大时代,有多少伤害埋伏左右;      -- 北岛《城门开》当一个大梦想埋于小身体,有多少潜能冲破束缚。      -- 小Q 《梦想家》-------------------------------------------...
    99+
    2023-01-31
    异常 Python
  • python异常处理
    import re,random,traceback kk ='<img src="//kanimg.9ku.com/Article/20170727/1501135687683763.gif" alt="不要惹怒胖子,后果自己看"&...
    99+
    2023-01-31
    异常 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作