好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python如何处理异常报错方法(建议收藏!)

写在前面

今天Python笔记的内容是:

异常处理

一旦Python脚本发生异常,程序需捕获并处理异常。

异常处理使得程序能够在处理异常后继续正常执行,不至于崩溃或终止执行。

什么是异常?

当Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。

当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行

举个例子:

>>> a = int(input())
x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'x'

在上述代码中,ValueError就是一个异常,通过异常信息,我们能找到错误所在的行号。

如何处理异常?

在前面讲到的例子中,修改后的代码为:

>>> while True:
	try:
		a = int(input("请输入一个整数:"))
		print("您输入的数字是:",a)
		break
	except ValueError:
		print("您输入的不是整数!")
		
请输入一个整数:3.14
您输入的不是整数!
请输入一个整数:a
您输入的不是整数!
请输入一个整数:6
您输入的数字是: 6

上述程序中:

在这里,有两个新的关键字:try和except; 前面讲过,当我们输入的值不是整数时,int()函数会抛出ValueError异常; 则try块中检测到ValueError异常时,就会终止try块后续的代码; 转而执行except块的代码; 当except ValueError:后的代码执行完毕后,程序就会继续从while语句的开始部分继续执行; 需要注意的是,只要输入的不是整数,int()函数都会抛出ValueError异常,那么try:后的break语句就不会执行,程序就会一直循环; 最后,当输入的值是整数,int()函数就不会抛出ValueError异常,try块就能继续执行,直到碰到break语句,程序就会退出循环;

try 与 except

try与except语句用来检测try语句块中的异常,并让except语句捕获异常并处理异常;

用法

如果不想在发生异常后程序被迫结束,就需要在 try语句块 里捕获异常,并在 except语句块 中处理异常。

try 与 except 的用法如下:

解析如下:

try中的语句块先执行。 如果try语句块中的某一语句执行时发生异常,Python就跳到except部分,从上到下判断抛出的异常对象是否与except后面的异常类相匹配,并执行第一个匹配该异常的except后面的语句块,异常处理完毕。 如果异常发生了,但是没有找到匹配的异常类别,则执行不带任何匹配类型的except语句后面的语句块,异常处理完毕。 如果try语句块的某一语句里发生了异常,却没有匹配的except子句,也没有不带匹配类型的except部分,则异常将往上被递交到上一层的try/except语句进行异常处理,或者直到将异常传递给程序的最上层,从而结束程序。 如果try语句块中的任何语句在执行时没有发生异常,Python将执行else语句后的语句块。 执行完except后的异常处理语句或else后面的语句块后,程序一定会执行finally后面的语句块。这里的语句块主要用来进行收尾操作,无论是否出现异常都将被执行。 一个异常处理模块至少有一个try和一个except语句块,else和finally语句块是可选的。

例子

来看一段代码:

三个测试如下:

1)以正确的格式输入,则 except 后面的模块均不会执行, else 后的模块会得到执行, finally 后面的模块语句会执行。

2)如果b的值被赋为 0 ,则会检测到 ZeroDivisionError异常对象 ,在 except ZeroDivisionError: 之后的模块会得到执行来处理该异常。异常处理完成后,执行 finally 后面的语句块。

3)如果只输入 a 的值, b 没有赋值,则 try 模块中将抛出 TypeError异常 。在程序的异常处理 except 中没有列出该类型异常的处理程序模块,则不带异常类型的 except 模块能够拦截该异常进行处理。异常处理结束后, finally 后面的语句也会得到执行。

python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) GeneratorExit 生成器(generator)发生异常来通知退出 Exception 常规错误的基类 StopIteration 迭代器没有更多的值 StandardError 所有的内建标准异常的基类 ArithmeticError 所有数值计算错误的基类 FloatingPointError 浮点计算错误 OverflowError 数值运算超出最大限制 ZeroDivisionError 除(或取模)零 (所有数据类型) AssertionError 断言语句失败 AttributeError 对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误的基类 I OError 输入/输出操作失败 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转换时错误 Warning 警告的基类 DeprecationWarning 关于被弃用的特征的警告 FutureWarning 关于构造将来语义会有改变的警告 OverflowWarning 旧的关于自动提升为长整型(long)的警告 PendingDeprecationWarning 关于特性将会被废弃的警告 RuntimeWarning 可疑的运行时行为(runtime behavior)的警告 SyntaxWarning 可疑的语法的警告 UserWarning 用户代码生成的警告

异常类的大致结构如下所示:

写在最后

到此这篇关于Python如何处理异常报错方法的文章就介绍到这了,更多相关Python异常报错处理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

查看更多关于Python如何处理异常报错方法(建议收藏!)的详细内容...

  阅读:42次