面向对象编程之异常处理

面向对象编程之异常处理

八股文如下:

        异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法,提供error code 所未能具体的优势。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解。 异常处理(又称为错误处理)功能提供了处理程序运行时出现的任何意外或异常情况的方法。异常处理使用 try、catch 和 finally 关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。

异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。

异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。

各种编程语言在处理异常方面具有非常显著的不同点(错误检测与异常处理区别在于:错误检测是在正常的程序流中,处理不可预见问题的代码,例如一个调用操作未能成功结束)。某些编程语言有这样的函数:当输入存在非法数据时不能被安全地调用,或者返回值不能与异常进行有效的区别。例如,C语言中的atoi函数(ASCII串到整数的转换)在输入非法时可以返回0。在这种情况下编程者需要另外进行错误检测(可能通过某些辅助全局变量如C的errno),或进行输入检验(如通过正则表达式),或者共同使用这两种方法。

通过异常处理,我们可以对用户在程序中的非法输入进行控制和提示,以防程序崩溃。

从进程的视角,硬件中断相当于可恢复异常,虽然中断一般与程序流本身无关。

        从子程序编程者的视角,异常是很有用的一种机制,用于通知外界该子程序不能正常执行。如输入的数据无效(例如除数是0),或所需资源不可用(例如文件丢失)。如果系统没有异常机制,则编程者需要用返回值来标示发生了哪些错误。

特点

1.在应用程序遇到异常情况(如被零除情况或内存不足警告)时,就会产生异常。

2.发生异常时,控制流立即跳转到关联的异常处理程序(如果存在)。

3.如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误信息

4.可能导致异常的操作通过 try 关键字来执行。

5.异常处理程序是在异常发生时执行的代码块。在 C# 中,catch 关键字用于定义异常处理程序。

6.程序可以使用 throw 关键字显式地引发异常。

7.异常对象包含有关错误的详细信息,其中包括调用堆栈的状态以及有关错误的文本说明。

8.即使引发了异常,finally 块中的代码也会执行,从而使程序可以释放资源。

简单的进行总结:

异常处理:
简单点来说,把可能会发生的错误,提取在代码里进行捕捉(监测!!),
try:
    代码
except Exception(Exception几乎可以捕捉所有错误的鼻祖) as e(e作为一个临时变量,报出错误打印信息!!):
    出错后要执行的代码

对于Exception而言,我是完全不推荐的,我们需要记住很多异常,不同的错误使用不同错误的方法!!

强类型错误:只要发生错误,程序立马崩溃,无法显示你自己定义的捕捉错误写下的文字提示!!
缩进、语法错误都是永远抓不到的强类型错误!!
SyntaxError     Indentation

 

在 Python 中,把程序运行时产生错误的情况叫做异常。出现异常情况有很多,常见的异常有以下几种:
AssertionError    断言语句失败(assert 后的条件为假)

①AttributeError    访问的对象属性不存在

②ImportError    无法导入模块或者对象,主要是路径有误或名称错误    

③IndentationError 代码没有正确对齐,主要是缩进错误

④IndexError    下标索引超出序列范围

⑤IOError        输入/输出异常,主要是无法打开文件

⑥KeyError    访问字典里不存在的键

⑦NameError     访问一个未声明的变量

⑧OverflowError    数值运算超出最大限制

⑨SyntaxError    python语法错误

⑩TabError    Tab和空格混用

十一、TypeError    不同类型数据之间的无效操作(传入对象类型与要求的不符合)

十二、ValueError    传入无效的值,即使值的类型是正确的

十三、ZeroDivisionError    除法运算中除数0 或者 取模运算中模数为0

一旦程序发生异常,表明该程序在执行时出现了非正常的情况,无法再执行下去。默认情况下,程序会终止退出。
直接放代码吧!

while True:
    try:
        num1=int(input('>>:'))
        num2=int(input('>>:'))
        res=num1+num2
        print(res)
    except Exception as e:
        print(e)
        print('请输入数字!!')

while True:
    try:
        num1=int(input('>>:'))
        num2=int(input('>>:'))
        res=num1+num2
        print(res,name)
    except NameError as e:
        print(e)
        print('有数据没有被定义!!')
    except ValueError as e:
        print(e)
        print('请输入数字!!')

name='小李'
while True:
    try:
        num1=int(input('>>:'))
        num2=int(input('>>:'))
        res=num1+num2
        print(res,name)
        name.check
    except NameError as e:
        print(e)
        print('有数据没有被定义!!')
    except AttributeError as e:
        print(e)
        print('没有该方法或者属性!!')
    except ValueError as e:
        print(e)
        print('请输入数字!!')

 

猜你喜欢

转载自blog.csdn.net/qq_46044325/article/details/127110502