一、异常
一般情况下,在Python无法正常处理程序时就会发生一个异常,异常表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
通过try/except语句来捕获异常
1 while True: 2 num1 = input('num1:') 3 num2 = input('num2:') 4 try: 5 num1 = int(num1) 6 num2 = int(num2) 7 result = num1 + num2 8 9 except ValueError as e: #传入一个调用者不期望的值,即使值的类型是正确的 10 print("value err",e) 11 12 except Exception as e: #捕获所有异常 13 print ('出现异常,信息如下:') 14 print (e)
try语法执行原理
如果try后的语句执行,出现异常就会执行第一个匹配该异常的except语句,如果不匹配则会搜索下一条语句,如果没有发生异常,执行else后的语句。
异常的种类
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
1 dic = ["nima", 'nimei'] 2 try: 3 print(dic[10]) #出现异常 4 except IndexError as e: 5 print(e) 6 else: 7 print("Correct") #没有问题执行else 8 finally: 9 print("Anything is possible") # 程序报错依然执行 10 #执行结果: 11 #list index out of range
二、自定义异常与断言
1 class YoyoException(Exception): 2 def __init__(self, msg): 3 self.message = msg 4 def __str__(self): 5 return self.message 6 a = 1 7 try: 8 assert a == 1 #断言 9 #assert a == 2 #条件不成立报错 10 raise YoyoException('我的异常') 11 except YoyoException as e: 12 print(e)
1 try: 2 fh = open("testfile", "w") 3 fh.write("这是一个测试文件,用于测试异常!!") 4 5 except IOError: 6 print ("Error: 没有找到文件或读取文件失败") 7 else: 8 print ("内容写入文件成功") 9 fh.close()