Python语言中程序运行错误和异常处理
''' Python捕获异常: 一旦发生异常,程序就会终止,这是非常糟糕的事情,这种糟糕体现在两方面 1.即便发生了异常,业务上可以忽略它,那么程序应当继续执行 2.程序终止,使得异常的信息没有被保留下来,不利于问题的分析和总结 为了提高程序的健壮性和解决问题,可以将异常捕获,根据业务要求来做对应的处理 ''' import os # 1. try ... except ... 语法来捕捉异常 def open_files(files): try: with open(files, 'r') as f: for line in f: print(line.strip()) except Exception as err:# 可以指定抛出哪个异常,如果你不想指定,那么可以抛出异常Exception, 它是所有异常的父类 print('文件不存在!\n{0}'.format(err)) else:# 如果没有异常发生,则执行以下的内容 print("文件读取成功") # 2. try ... except ... finally 语句无论是否发生异常都将执行最后finally块内的代码 def open1_files(files): try: with open(files, 'r') as f: for line in f: print(line.strip()) except FileNotFoundError as err:# except 可以指定想要捕获的异常 print('文件不存在!\n{0}'.format(err)) else:# 如果没有异常发生,则执行以下的内容 print("文件读取成功") finally:# finally语句块,不论try子句里是否发生异常,也不论你在except语句块里做了什么操作,总之,最终一定会执行finally语句块里的代码 print("executing finally clause") # 3. 程序主动抛出异常 raise 语句自己触发异常(一般很少使用这种方式) # 有时,程序需要主动抛出异常,因为某些情况下,你需要反馈消息给更上层的调用者,告诉它有一些异常情况发生,而你抛出异常的地方,没有能力处理它,因此需要向上抛出异常 def mye(level): if level > 1: raise Exception('level 不能大于 1') # 触发异常后,后面的代码就不会再执行 print(level) return level if __name__ == '__main__': open_files('1.txt') open1_files('2.txt') mye(2)