一篇文章带你了解python异常基础

 更新时间:2021年08月18日 09:06:15   作者:wakeyo_J  
今天小编就为大家分享一篇关于Python中的异常介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

1. 程序中的问题

1.1 低级语法错误

低级错误纯属语法错误,代码主要在编写、调试阶段就报错。

>>> if True
SyntaxError: invalid syntax
>>> 

上述错误是初学时很容易犯的语法错误,True后面缺少冒号(:)。

1.2 中介错误:代码存在隐性错误

隐形错误主要是指代码编写存在逻辑错误或缺陷,当程序满足特定数据处理条件时,报错或给出错误答案。

>>> def print_D(dic):
	i=0
	len1=len(dic)
	while i < len1:
		print(dic.popitem())    #随机删除并返回一个元素
		i+=1
		
>>> print_D({1:'a',2:'b'})
(2, 'b')
(1, 'a')

上述代码能够正常运行,但是在实际的程序使用过程中,可能另一个程序员传递一个非字典对象后。

>>> print_D([1,2,3,4])
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    print_D([1,2,3,4])
  File "<pyshell#9>", line 5, in print_D
    print(dic.popitem())
AttributeError: 'list' object has no attribute 'popitem'

错误的传递对象导致了正常程序出错,这就是隐性错误。隐性错误的特点是正常情况下程序正常运行,特殊情况下(如边界值没有考虑到,传入数据没有仔细检查类型等)出错。有些隐性错误甚至不报错,而是由结果输出,这是最糟糕的情况。

1.3 高级错误:软件面对不确定性的异常错误

高级错误指不确定性的错误,主要指软件的代码本身没有问题,所输入的数据也能得到控制或保证,而是在运行过程中环境所带来的不确定性异常。如:

(1)软件本身去尝试打开一个文件,而这个文件已经被破坏或独占(独占指一个进程(线程)处理过程,其他进程(线程)无法同步处理,只能等待这个进程(线程)处理完成,其他进程(线程)才能继续操作)。

(2)软件在往数据库插入数据过程中,突然网络中断,导致数据丢失

(3)软件运行硬件出现故障,导致软件无法正常运行等

(4)数据库系统被破坏,软件读写数据报错

(5)软件输入内容过度复杂或存在错误操作,。

2. 捕捉异常

2.1 基本异常捕捉语句

基本异常捕捉语句语法

try:
	代码模块1
except:
	代码模块2

try关键字,表示捕捉异常语句的开始;代码模块1,属于正常需要执行的代码模块;except关键字,用于捕捉异常信息,并可以给出出错信息(默认英文提示)。

在这里插入图片描述

(1)先执行try语句,代表捕捉异常机制开始

(2)执行代码模块1,若没有出错,忽略except关键字和代码模块2,代码正常执行完毕

(3)若执行代码模块1过程发生异常现象,则终止代码模块1内剩余代码的执行,转到except处

(4)except关键字捕捉到异常信息,并执行代码模块2(往往给出错误信息提示或做出错后问题处理),异常处理结束

示例

>>> def print_D(dic):
	i=0
	try:
		len1=len(dic)
		while i < len1:
			print(dic.popitem())
			i+=1
	except:
		print('传递值类型出错,必须为字典类型!')
		
>>> print_D({1:'a',2:'b'})
(2, 'b')
(1, 'a')
>>> print_D([1,2,3,4])
传递值类型出错,必须为字典类型!        #出错后的正确提示信息

2.2 带finally子句的异常处理

基本格式:

try:
	代码模块1
except:
	代码模块2
finally:
	代码模块3

finally关键字后的代码模块3,运行代码模块1是否出错都会执行的代码功能。

案例 1

>>> try:
	1/0
except:
	print('除数不能为0')
finally:
	print('出现执行结束')
>>> 

案例 2

>>> try:
	1/2
except:
	print('出书不能为0')
finally:
	print('出现运行结束')
>>> 

#运行结果
0.5
出现运行结束

案例 3

import sys
try:
	1/0
except:
	print('除数不能为0')
	sys.exit()
finally:
	print('程序执行结束')
print('我能执行码?')
>>> 

#运行结果
除数不能为0
程序执行结束

2.3 try-except-else 结构

结构运行过程:程序进入try语句部分,当try语句部分发生异常则进入except语句部分,若不发生异常进入else语句部分。

try:
    print("正常代码")
except Exception as e:
    print("将不会输出这句话")
else:
    print("这句话将被输出")
print('-'*30)
try:
    print(1/0)
except Exception as e:
    print("进入异常处理")
else:
    print("不会输出")

>>> 

#运行结果
正常代码
这句话将被输出
------------------------------
进入异常处理

2.4 try-except-else-finally 结构

try:
    print("没有异常")
except Exception as e:
    print("不会输出!")
else:
    print("进入else")
finally:
    print("必须输出!")
print('-'*30)
try:
    print(1/0)
except Exception as e:
    print("引发异常")
else:
    print("不会进入else")
finally:
    print("必须输出!")
>>>

# 运行结果
没有异常
进入else
必须输出!
------------------------------
引发异常
必须输出!

2.5 捕捉特定异常信息

在这里插入图片描述

3. 抛出异常

python允许程序员自己触发异常,可以通过raise关键字来实现,使用格式:

raise [Exception]

Exception参数可选,其对象如上表所示的Exception类的子类。

示例一:不带参数的触发

>>> raise
Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    raise
RuntimeError: No active exception to reraise
>>> 

代码通过raise子句抛出一个没有问题的异常信息。

示例二:带参数的触发

>>> i='1'
>>> if type(i)!=int:
	raise TypeError('i类型出错!')
Traceback (most recent call last):
  File "<pyshell#57>", line 2, in <module>
    raise TypeError('i类型出错!')
TypeError: i类型出错!
>>> 

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • 基于Python中的yield表达式介绍

    基于Python中的yield表达式介绍

    今天小编就为大家分享一篇基于Python中的yield表达式详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python数据类型可变不可变知识点总结

    python数据类型可变不可变知识点总结

    在本篇文章里小编给各位整理的是关于python数据类型可变不可变知识点总结,需要的朋友们可以学习下。
    2020-03-03
  • 使用PYTHON接收多播数据的代码

    使用PYTHON接收多播数据的代码

    一个PYTHON脚本,能够在LINUX上发送多播数据。其实编制起来也不算太麻烦。具体代码如下
    2012-03-03
  • 用python 制作图片转pdf工具

    用python 制作图片转pdf工具

    这篇文章主要介绍了用python 制作图片转pdf工具的思路及代码,非常详细,有需要的小伙伴参考下
    2015-01-01
  • DjangoWeb使用Datatable进行后端分页的实现

    DjangoWeb使用Datatable进行后端分页的实现

    这篇文章主要介绍了DjangoWeb使用Datatable进行后端分页的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python pandas最常用透视表实现应用案例

    python pandas最常用透视表实现应用案例

    透视表是一种可以对数据动态排布并且分类汇总的表格格式,它在数据分析中有着重要的作用和地位,在本文中,我将为你介绍python中如何使用pandas包实现透视表的功能,以及一些常见的应用案例
    2024-01-01
  • 使用Python进行自动化部署详解

    使用Python进行自动化部署详解

    在软件开发和运维领域,自动化部署是一个至关重要的环节,本文将介绍如何使用Python进行自动化部署,并提供代码实例来说明,希望对大家有所帮助
    2024-04-04
  • Python高级特性 切片 迭代解析

    Python高级特性 切片 迭代解析

    这篇文章主要介绍了Python高级特性 切片 迭代解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 使用Python编程分析火爆全网的鱿鱼游戏豆瓣影评

    使用Python编程分析火爆全网的鱿鱼游戏豆瓣影评

    本文来为大家介绍如何使用Python爬取影评的操作,主要是爬取《鱿鱼游戏》在豆瓣上的一些影评,对数据做一些简单的分析,用数据的角度重新审视下这部剧,有需要的朋友可以借鉴参考下
    2021-10-10
  • 如何使用python统计字符在文件中出现的次数

    如何使用python统计字符在文件中出现的次数

    在开发过程中很多时候我们有统计单个字符或者字符串在另一个字符串中出现次数的需求,下面这篇文章主要给大家介绍了关于如何使用python统计字符在文件中出现的次数的相关资料,需要的朋友可以参考下
    2023-03-03

最新评论