Python学习——"异常与异常处理"

今天学习的是python中的异常处理,所以简单的整理下学习的知识点。

还是照旧,先了解下概念,什么是异常处理呢?

我听到这个概念时,脑海里第一个出现的就是错误,异常不就是进程出现错误,导致无法运行,所以才显示异常。

你们呢?那到底什么是异常呢?

异常指的是软件在运行的过程中,因为一些原因(如:使用者操作不当等),引起程序错误,导致软件奔溃的这种现象,就叫做异常

我们一般遇见异常怎么办呢?那就是勇敢的面对它,奥里给!因为异常不解决,我们就无法正常的运行我们的程序,所以为了面包,为了房子,我们得解决异常,是我们的代码程序可以继续正常运行。同时,处理异常可以帮助提高软件容错性。

那我们如何解决异常呢?接下来说说如何解决异常。

处理异常

我们可以通过使用 try..except 来处理异常状况。一般来说我们会把通常的语句放在 try 代码块中,将我们的错误处理器代码放置在 except 代码块中。

try ... catch语句块来完成,使用try抓捕异常。

try:
            # 将有可能触发异常的代码

except:
            print("处理异常")

那到底是如何处理的呢?

我们将所有可能引发异常或错误的语句放在 try 代码块中,并将相应的错误或异常的处理器(Handler)放在 except 子句或代码块中。except 子句可以处理某种特定的错误或异常,或者是一个在括号中列出的错误或异常。如果没有提供错误或异常的名称,它将处理所有错误与异常。

要注意到必须至少有一句 except 字句与每一句 try 字句相关联。不然,有一个 try 代码块又有什么意义?

如果没有任何错误或异常被处理,那么将调用 Python 默认处理器,它只会终端程序执行并打印出错误信息。

我们还可以拥有一个 else 子句与 try..except 代码块相关联。else 子句将在没有发生异常的时候执行。

常见异常

异常名称异常描述
ValueError传入无效的参数
KeyError映射中没有这个键
KeyboardInterrupt用户中断执行(通常是输入^C)
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点数计算错误
IndexError序列中没有此索引(index)
SyntaxErrorPython 语法错误
ImportError导入模块/对象失败
UserWarning用户代码生成的警告

 

 

 

 

 

 

 

 

 

 

异常的继承关系

BaseException
             |
Exception
             |

异常的处理流程

先说下try.....except语法

try:

<语句>                          #运行别的代码

except<名字>:

<语句>                          #如果在try部分引发了‘name’异常

except<名字>:,<数据>:

<语句>                          #如果引发了‘name’异常,获得附加的数据

else:

<语句>                          #如果没有异常发生

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

|——如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。

|——如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。

|——如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

         try:
            # 将有可能触发异常的代码

        except Xxx as e:
            print("处理Xxx异常")
        except Xxxx as e:
            print("处理Xxxx异常")
        
        except Exception as e:
            print("使用多态将其他异常一网打尽")

        # 在python中,很多块级作用域,都有这个else
        else:
            print("没有出现异常时执行的代码")

多个异常的处理方式

        try:
            pass

        except KeyboardInterrupt:
            pass
        except BlockingIOError:
            pass
        except EOFError:
            pass
        except Exception:

        # 第二种多个异常处理的写法(不推荐,认识就可以了)
        try:
            pass
        except (KeyboardInterrupt, KeyError, ValueError, EnvironmentError) as e:
            print("出现了异常")

finally关键字和自定义异常

        try:    
            # 有可能出现异常的代码
        except Xxx:
            print("处理异常")
        ...
        else:
            print("没有异常时执行的")
        finally:
            # 表示最后要执行的代码
            # 必须要执行的代码
            # 不管有没有异常出现,必须要执行的
            # 一般会将必须要执行的代码,如资源的释放,链接的是关闭等等
        
        函数中:如果在return后面存在finally,那么代码并不会直接返回,而是需要先执行
            finally代码,之后才会返回

自定义异常

通过创建一个新的异常类,程序可以命名它们自己的异常。

异常应该是典型的继承自Exception类,通过直接或间接的方式。

首先需要定义一个类,之后让这个类继承Exception\BaseException,当然建议使用Exception类

人为的抛出异常:
raise关键字
作用:提示错误,向上层传递错误信息

简单举例说明下

首先我们先定义一个类

class networkerro(runningerror)

         def__init__(self,arg):

              self.args = arg

我们定义完类后,便可以触发该异常

try:
    raise networkerror("Bad hostname")
except networkerror,e:
    print e.args

好了,今天的分享就到这里了,其实学习的道路是充满了困难,但是面对困难的最好方法,就是勇敢的面对困难。

希望自己也可以学有所成,有所作为!

加油,奥里给!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值