首页 > 其他分享 >异常处理实例

异常处理实例

时间:2023-01-01 11:45:33浏览次数:37  
标签:处理 self except try finally 实例 print 异常

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

相关文章

  • OpenCV android sdk配置OpenCV android NDK开发实例
    OpenCVandroidsdk配置OpenCVandroidNDK开发实例    在Android应用中调用OpenCV进行图像处理的方法有很多种,考虑到性能问题,本人推荐使用NDK进行开发,毕竟C/C++要......
  • 聚类算法-最大最小距离算法(实例+代码)
    聚类算法-最大最小距离算法(实例+代码)目录​​聚类算法-最大最小距离算法(实例+代码)​​​​一、最大最小距离算法基本思想​​​​二、算法实现步骤​​​​1.最大最小距......
  • PyTorch数据集处理
    数据样本处理的代码可能会变得杂乱且难以维护,因此理想状态下我们应该将模型训练的代码和数据集代码分开封装,以获得更好的代码可读性和模块化代码。PyTorch提供了两个基本方......
  • 学习用Pandas处理分类数据!
     Datawhale干货 作者:耿远昊,Datawhale成员,华东师范大学分类数据(categoricaldata)是按照现象的某种属性对其进行分类或分组而得到的反映事物类型的数据,又称定类数据。直白......
  • 基于OpenCV的图像分割处理!
     Datawhale干货 作者:姚童,Datawhale优秀学习者,华北电力大学图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和......
  • CleanMyMac清理垃圾时频繁要求输入密码的处理方法
    CleanMyMac一款专为MacOS用户所设计的Mac系统清理工具,最近有不少用户反映在使用CleanMyMac清理系统垃圾文件的时候会频繁要求输入开机密码,让人烦不胜烦。如何解决这一问题呢......
  • C#异常没有错误行号的原因
    异常处理是编程中必知必会的重要内容,我们经常使用try-catch来捕获和记录异常信息的原因、位置信息,以便进行排查和解决问题。使用堆栈信息可明确抛出异常具体行号,但有时输出......
  • 【信号检测】基于LSTM实现工业机器信号数据异常检测附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • Trick 5: 关于 GCD 的一些处理方法和性质
    经典的mobius:\(\varepsilon(x)=\sum\limits_{d|x}\mu(d)\)经典的euler:\(x=\sum\limits_{d|x}\varphi(d)\)处理区间问题。如果考虑一段区间的\(\gcd\),那......
  • POSIX多编程编程实例
    #include<stdio.h>#include<stdlib.h>#include<time.h>#include<unistd.h>#include<pthread.h>#include<string.h>#defineNUM3pthread_mutex_tmutex;pth......