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

目录
  • 1. 程序中的问题
    • 1.1 低级语法错误
    • 1.2 中介错误:代码存在隐性错误
    • 1.3 高级错误:软件面对不确定性的异常错误
  • 2. 捕捉异常
    • 2.1 基本异常捕捉语句
    • 2.2 带finally子句的异常处理
    • 2.3 try-except-else 结构
    • 2.4 try-except-else-finally 结构
    • 2.5 捕捉特定异常信息
  • 3. 抛出异常
  • 总结

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类型出错!
>>>

总结

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

(0)

相关推荐

  • Python抛出引发异常(raise)知识点总结

    Python中try块可以捕获测试代码块中的错误.except块可以处理错误.finally块可以执行代码,而不管try-和except块的结果如何.本文主要介绍Python 抛出引发异常(raise). Python 常用术语 抛出引发异常(raise) 作为Python开发人员,可以在某些情况下引发异常. 要抛出(或引发)异常,请使用raise关键字. 例如: 当x小于0时,抛出异常并停止程序: x = -1 if x < 0: raise Exception("x需要是大于等于0的数

  • python用户自定义异常的实例讲解

    说明 1.程序可以通过创建一个新的异常类来命名它们自己的异常.异常应该是典型的继承自Exception类,直接或间接的方式. 2.异常python有一个大基类,继承了Exception.因此,我们的定制类也必须继承Exception. 实例 class ShortInputException(Exception): def __init__(self, length, atleast): self.length = length self.atleast = atleast def main()

  • 一文搞懂python异常处理、模块与包

    一 异常处理 1.什么是异常 Error(错误)是系统中的错误,程序员是不能改变的和处理的,如系统崩溃,内存空间不足,方法调用栈溢等.遇到这样的错误,建议让程序终止. Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复.遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常. 2常见异常 IndentationError: 缩进错误 KeyboardInterrupt: Ctrl+C被按下 UnboundLocalError : 有同名的全局变量 d = {'n

  • Python异常处理与反射相关问题总结

    一.异常处理 在程序开发中如果遇到一些 不可预知的错误 或 你懒得做一些判断 时,可以选择用异常处理来做. import requests while True: url = input("请输入要下载网页地址:") res = requests.get(url=url) with open('content.txt', mode='wb') as f: f.write(res.content) 上述下载视频的代码在正常情况下可以运行,但如果遇到网络出问题,那么此时程序就会报错无法正常

  • python异常的捕捉和补救实例详解

    1.捕捉特定异常 第一个符合条件的except语句会被执行,用于报告错误.如果仅仅是报告错误,程序依然会停止. a = 0 try: b = 5/a except ZeroDivisionError: print('Error: a不能为0') except ValueError: print('Error: 传入参数无效') 2.捕捉所有异常 except语句后面Exception表示捕获任何异常类型. a = 0 try: b = 5/a except Exception: print('a

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

    目录 1. 程序中的问题 1.1 低级语法错误 1.2 中介错误:代码存在隐性错误 1.3 高级错误:软件面对不确定性的异常错误 2. 捕捉异常 2.1 基本异常捕捉语句 2.2 带finally子句的异常处理 2.3 try-except-else 结构 2.4 try-except-else-finally 结构 2.5 捕捉特定异常信息 3. 抛出异常 总结 1. 程序中的问题 1.1 低级语法错误 低级错误纯属语法错误,代码主要在编写.调试阶段就报错. >>> if True S

  • 一篇文章带你了解python字典基础

    目录 1. 字典基础知识 字典的基本格式表示 字典的键.值设置要求 1)键的设置要求 2)值的设置要求 2. 字典元素增加 1.利用赋值给字典增加元素 2.利用setdefault()方法给字典增加元素 3. 字典值查找 1.字典名+[key]查找 2.利用get()方法查找 4. 字典值修改 1.利用赋值修改键对应的值 2.利用update()方法修改键对应的值 5. 字典元素删除 1.利用del函数删除 2.利用pop()方法删除 3.利用popitem()方法删除 6. 字典遍历操作 1.

  • 一篇文章带你了解python集合基础

    目录 1. 集合类型定义 (1)集合是多个元素的无序组合 2. 集合操作符 3. 集合处理方法 4. 集合类型应用场景 (1)包含关系比较 (2)数据去重:集合数据所有元素无重复 总结 1. 集合类型定义 (1)集合是多个元素的无序组合 集合类型与数学中的集合概念一致 集合元素之间无序,每个元素唯一,不存在相同元素 集合元素不可更改,不能是可变数据类型 集合使用{}表示,元素间用英文逗号分隔 建立集合类型用{}或set() 建立空集合类型,必须使用set() a = {'python',256,

  • 一篇文章带你了解python元组基础

    目录 1. 元组基本知识 1.元组的基本格式和用法 2. 元组操作实例 1.建立元组 2.查找元素:通过元组下标实现. 3.删除元组:对元组的删除时不允许的,可以通过del函数,实现对整个元组对象的删除. 4.统计元素 5.合并元组 6.转换元组 总结 1. 元组基本知识 元组:是不可变的序列,也是一种可以存储各种数据类型的集合,用小括号(())表示与那组的开始和结束,元素之间用半角逗号(,)分隔.不可变指不能对元组对象进行增加元素.变换元素位置.修改元素.删除元素操作.元组中每个元素提供对应的

  • 一篇文章带你了解Java Spring基础与IOC

    目录 About Spring About IOC Hello Spring Hello.java Beans.xml Test.java IOC创建对象的几种方式 Spring import settings Dependency Injection 1.构造器注入 2.set注入 3.拓展注入 P-namespcae&C-namespace Bean scopes singleton prototype Bean的自动装配 byName autowire byType autowire 小结

  • 一篇文章带你了解Python中的装饰器

    目录 前言 Python 中的装饰器是什么 语法糖 使用 Python 装饰器修改函数行为 使用 Python 装饰器对函数进行计时 使用 Python 装饰器将有用信息记录到终端 Web app 中使用的装饰器 将参数传递给 Python 装饰器 使用多个 Python 装饰器 总结 前言 本文将带你学习装饰器在 Python 中的工作原理,如果在函数和类中使用装饰器,如何利用装饰器避免代码重复(DRY 原则,Don’t Repeat Yourself ). Python 中的装饰器是什么 装

  • 一篇文章带你深入了解Java基础(3)

    目录 1.方法的基本定义 2.方法重载 3.方法的递归调用 4.面向对象的前身是面向过程 5.类与对象 总结 1.方法的基本定义 限制条件:本次所讲解的方法指的是在主类中定义,并且由主方法由主方法直接调用. 方法是指就是一段可以被重复调用的代码块. 在java里面如果想要进行方法的定义,则可以使用如下的方法进行完成. public static 方法返回值 方法名称([参数类型 变量,....]){ 方法体代码 ; return [返回值]; } 在定义方法的时候对于方法的返回值由以下两类:vo

  • 一篇文章带你了解python标准库--time模块

    目录 1. 调用语法: 2. time概述 3. 时间获取 4. 时间格式化(将时间以合理的方式展示出来) 5. 程序计时应用 6. 示例 总结 Time库是python中处理时间的标准库 1. 调用语法: import time time.<b>() 计算机时间的表达,提供获取系统时间并格式化输出功能 提供提供系统精确即使功能,用于程序性能分析 2. time概述 time库包括三类函数 时间获取: time() ctime() gmtime() 时间格式化: strftime() strp

  • 一篇文章带你了解python标准库--math模块

    目录 1. math模块中的常用函数 2. 案例 2.1 浮点数求整 2.2 对元组里的每个元素求和 2.3 求数的绝对值 总结 python语言的一大优势:为科学计算提供了大量的支持功能,math模块提供了很多数学计算函数. math模块定义了一些数学模块,这个模块属于编译系统自带,因此它可以被无条件调用,需要注意的是,这些函数无法应用于复数. 1. math模块中的常用函数 2. 案例 2.1 浮点数求整 1.用trunc(x)取整,x为浮点数 >>> import math >

  • 一篇文章带你学习python的函数与类

    目录 函数 模块 类 根据类创建实例 继承 总结 现在做的一个小项目需要用到python的相关知识,但是因为太久没用一些东西都忘掉了,因此在本篇博客中记录一下python的函数和类的基础知识,下次可以直接查阅,用的参考书是<Python编程从入门到实践> 函数 运用关键字def告诉Python要定义函数: def greet_name(): print("Hello!") 包含参数: def greet_name(username): print("Hello,

随机推荐