异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下
错误分为:
语法错误(程序运行前需要改正该错误)
逻辑错误
一个异常标识一种错误
常见异常:
AttributeError 试图访问一个对象没有的属性
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
程序发生错误时会产生异常,该异常由解释器抛出,同时会终止程序的运行。为了保证程序的健壮性与容错性,即在遇到错误时程序不会崩溃,我们需要对异常进行处理。
如果错误发生的条件是可预知的,我们需要用if进行处理:在错误发生之前进行预防
如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理
1 #基本语法为 2 try: 3 被检测的代码块 4 except 异常类型: 5 try中一旦检测到异常,就执行这个位置的逻辑 6 7 #举例 8 try: 9 f=open(‘a.txt‘) 10 g=(line.strip() for line in f) 11 print(next(g)) 12 print(next(g)) 13 print(next(g)) 14 print(next(g)) 15 print(next(g)) 16 except StopIteration: 17 f.close()
1 #1 异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。 2 s1 = ‘hello‘ 3 try: 4 int(s1) 5 except IndexError as e: # 未捕获到异常,程序直接报错 6 print e 7 8 #2 多分支 9 s1 = ‘hello‘ 10 try: 11 int(s1) 12 except IndexError as e: 13 print(e) 14 except KeyError as e: 15 print(e) 16 except ValueError as e: 17 print(e) 18 19 #3 万能异常Exception 20 s1 = ‘hello‘ 21 try: 22 int(s1) 23 except Exception as e: 24 print(e) 25 26 #4 多分支异常与万能异常 27 #4.1 如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么骚年,大胆的去做吧,只有一个Exception就足够了。 28 #4.2 如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了。 29 30 #5 也可以在多分支后来一个Exception 31 s1 = ‘hello‘ 32 try: 33 int(s1) 34 except IndexError as e: 35 print(e) 36 except KeyError as e: 37 print(e) 38 except ValueError as e: 39 print(e) 40 except Exception as e: 41 print(e) 42 43 #6 异常的其他机构 44 s1 = ‘hello‘ 45 try: 46 int(s1) 47 except IndexError as e: 48 print(e) 49 except KeyError as e: 50 print(e) 51 except ValueError as e: 52 print(e) 53 #except Exception as e: 54 # print(e) 55 else: 56 print(‘try内代码块没有异常则执行我‘) 57 finally: 58 print(‘无论异常与否,都会执行该模块,通常是进行清理工作‘) 59 60 #7 主动触发异常 61 try: 62 raise TypeError(‘类型错误‘) 63 except Exception as e: 64 print(e) 65 66 #8 自定义异常 67 class EgonException(BaseException): 68 def __init__(self,msg): 69 self.msg=msg 70 def __str__(self): 71 return self.msg 72 73 try: 74 raise EgonException(‘类型错误‘) 75 except EgonException as e: 76 print(e) 77 78 #9 断言:assert 条件 79 assert 1 == 1 80 assert 1 == 2
if也可以对异常进行处理,但不够方便,推荐使用try-expect
try...except是附加给的程序的一种异常处理的逻辑,与主要的工作是没有关系的,这种东西加的多了,会导致代码可读性变差
只有在错误发生的条件无法预知的情况下,才应该加上try...except
https://www.cnblogs.com/linhaifeng/articles/6232220.html
原文:https://www.cnblogs.com/dreamer-lin/p/11630409.html