如何处理异常
无论发生什么情况,finally block 中的语句都会被执行,哪怕前面的 try 和 excep block 中使用了 return 语句。
import sys try: f = open('file.txt', 'r') #.... # some data processing except OSError as err: print('OS error: {}'.format(err)) except: print('Unexpected error:', sys.exc_info()[0]) finally: f.close()
假如不存在file.txt文件,则finally语句会抛出以下异常
Traceback (most recent call last): File ".\errorhandle.py", line 24, in <module> f.close() NameError: name 'f' is not defined
文件读写最好使用with open
import sys,os inFile = 'file.txt' if not os.path.exists(inFile): print(f'file {inFile} not exist') sys.exit() with open(inFile, 'r') as fin: fin.read()
用户自定义异常
class MyInputError(Exception): """Exception raised when there're errors in input""" def __init__(self, value): # 自定义异常类型的初始化 self.value = value def __str__(self): # 自定义异常类型的 string 表达形式 return ("{} is invalid input".format(repr(self.value))) try: raise MyInputError(1) # 抛出 MyInputError 这个异常 except MyInputError as err: print('error: {}'.format(err))
执行代码块结果:
error: 1 is invalid input
参考资料:
极客时间《Python核心技术与实战》