1、继承Python内置异常类实现自定义异常类
''' 继承Python内置异常类实现自定义异常类 ''' class ShortInputException(Exception): '自定义异常类' def __init__(self,length,atleast): Exception.__init__(self) self.length = length self.atleast = atleast try: s = input('请输入-->') if len(s) < 3: raise ShortInputException(len(s),3) except EOFError: print('您输入了一个结束标识符EOF') except ShortInputException as x: print('ShortInputException:输入的长度是%d,长度至少应该时%d' %(x.length,x.atleast)) else: print('没有发生异常')
2、异常处理例子
''' 异常处理 ''' class MyError(Exception): def __init__(self,value): self.value = value def __str__(self): return repr(self.value) try: #先尝试以下,下面有没有错误,靠有错误,直接跳到except语句 raise MyError(2*2) except MyError as e: #e,是从MyError调用的 print('我发错误出现,value:',e) raise MyError('oops!')
3、如果自己编写的某个模块需要抛出多个不同但相关的异常 可以先创建一个基类 然后创建多个派生类表示不同的异常
''' 如果自己编写的某个模块需要抛出多个不同但相关的异常 可以先创建一个基类 然后创建多个派生类表示不同的异常 ''' class Error(Exception): #基类 pass class InputError(Error): #派生类 ''' Exception raise for errors in the input Attributes: expression——input expression in which the error occurred message——explanation of the error ''' def __init__(self,expression,message): self.expression = expression self.message = message class TransitionError(Error): #派生类 ''' Raised when an operation attempts a state transition that's not allowed Attributes: privious——state at beginning of transition next——attempted new state message——explanation of why the specific transition is not allowed ''' def __init__(self,previous,next,message): self.previous=previous self.next = next self.message = message
4、使用异常处理 实现,只能输入数字 输入其它的,则被异常捕捉,然后重新输入
''' 使用异常处理 实现,只能输入数字 输入其它的,则被异常捕捉,然后重新输入 ''' while True: try: x=int(input('Please enter a number:')) break except ValueError: print('That was not a valid number.Try again……')
5、再使用时,except自居可以再异常类名字后面指定一个变量 用来捕获异常的参数或更详细的信息
''' 再使用时,except自居可以再异常类名字后面指定一个变量 用来捕获异常的参数或更详细的信息 ''' try: raise Exception('spam','eggs') except Exception as inst: print(type(inst)) print(inst.args) print(inst) x,y=inst.args print('x=',x) print('y=',y)
6、try……except……else……结构 如果try中代码抛出了异常,并且被某个except捕捉。 则执行相应的异常处理代码,这种情况不会执行else中 的代码,如果try中的代码没有抛出任何异常,则执行 else块中的代码
''' try……except……else……结构 如果try中代码抛出了异常,并且被某个except捕捉。 则执行相应的异常处理代码,这种情况不会执行else中 的代码,如果try中的代码没有抛出任何异常,则执行 else块中的代码 ''' a_list = ['China','America','England','France'] while True: n = input("请输入字符串的序号:") try: n = int(n) print(a_list[n]) except(IndexError,ValueError): print('列表元素的下标越界或格式不正确,请输入正确的字符串序号') else: break
7、带有多个except的try结构
''' 带有多个except的try结构 ''' while True: try: x = input('请输入被除数:') y = input('请输入除数:') z = float(x) / float(y) except ZeroDivisionError: print('除数不能为0') except ValueError: print('被除数和除数应该为数值类型') except NameError: print('变量不存在') else: print(x, '/', y, '=', z) break
8、将要捕获的异常写再一个元组中,可以是用一个except语句捕获多个异常 并且共用一段异常处理代码
''' 将要捕获的异常写再一个元组中,可以是用一个except语句捕获多个异常 并且共用一段异常处理代码 ''' try: f = open('myflie.txt') s = f.readline() i = int(s.strip()) except (OSError,ValueError,RuntimeError,NameError): print('报错')
9、try……except……else……finally……结构 finally语句块,无论是否出现异常都会执行
''' try……except……else……finally……结构 finally语句块,无论是否出现异常都会执行 ''' def divide(x,y): try: result = x/y except ZeroDivisionError: print("division by zero") else: print('结果:',result) finally: print('无论怎样我都会执行,气死你') divide(3,0) divide('3','1')
10、如果文件不存在,而导致文件对象创建失败,从而导致文件不能正常关闭 那么再finally,也会抛出异常
''' 如果文件不存在,而导致文件对象创建失败,从而导致文件不能正常关闭 那么再finally,也会抛出异常 ''' try: f = open('tesaft.txt','r') line = f.readline() print(line) except: #这种就是,啥子异常都捕捉 print('出现问题啦!!!') finally: f.close()
11、再使用待用finally子句的异常处理结构的时候 应该尽量避免再finally子句中使用return语句 否则会出现意想不到的错误
''' 再使用待用finally子句的异常处理结构的时候 应该尽量避免再finally子句中使用return语句 否则会出现意想不到的错误 ''' def demo_div(a,b): try: return a/b except: print('出错了') finally: return -1 print(demo_div(1,0)) print(demo_div(1,1)) #好吧,demo_div居然通过finally实现了变卦功能,玩不起
12、断言和异常处理经常结合使用
''' 断言和异常处理经常结合使用 ''' try: assert 1==2,'不相等噢' except AssertionError as reason: print("%s:%s"%(reason.__class__.__name__,reason)) #获取错误的名字,获取
13、with文件执行完毕后,会自动关闭
''' 上下文管理 使用上下文管理语句with可以实现自动管理资源 再代码块执行完毕之后自动还原进入该代码块之前的现场或上下文 不论何种原因跳出with块,也无论是否发生异常,总能保证资源 正确被释放,大大简化程序员的工作 常用于文件操作、网络通信、数据库操作、多线程与多线程之类的场合 ''' #文件执行完毕后,会自动关闭 with open('D:\\test.txt') as f: for line in f: print(line)
标签:处理,self,except,try,finally,实例,print,异常 From: https://www.cnblogs.com/buchijiuminvhai/p/17017889.html