• 013.Python基础--异常/错误处理


    异常处理 & 语法错误

    语法错误:简而言之,就是你的代码写错了

    异常:  即使是你的代码在语法上没有任何错误,也可能引发错误,我们称为异常

    万能的 try except 语句:

    在try程序段中,我们放入容易犯错的部分。后面可以跟上except

    执行方式:

    • 首先,执行 try 子句 (在 try 和 except 关键字之间的部分)。

    • 如果没有异常发生, except 子句 在 try 语句执行完毕后就被忽略了。

    • 如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。

      如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的except子句。然后继续执行 try 语句之后的代码。

    • 如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try 语句中。

      如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息。

    我们来写一个:

    try:

      print(a*2)

    except TypeError:

      print('TypeError')

    当然except 后面可跟多个错误类型

    try:

      print(a*2)

    except (TypeError,RuntimeError,NameError):

      print('error')

    try except 加上else语句

    当 try 语句没有抛出异常时,需要执行一些代码,可以使用这个子句

    使用 else 子句比在 try 子句中附加代码要好,因为这样可以避免 try … except 意外的截获本来不属于它们保护的那些代码抛出的异常

    我们来比较一下:

    例子1(try子句没有问题):

    a = 1

    try:

      print(a*2)

    except (TypeError,RuntimeError,NameError):

      print('error')

    else:

      print('ok')

    此时将会输出 2 no

    例子2(try子句有异常):

    try:

      print(a*2)

    except (TypeError,RuntimeError,NameError):

      print('error')

    else:

      print('ok')

    此时将会输出 ok

    抛出异常——raise (强制抛出一个指定的异常)

    来 先强制抛一个异常再说:

    raise NameError('this is a error')

    程序将会输出 this is a error这样的错误叫NameError

    当你需要明确一个异常是否抛出时,又不想处理它,raise可以让它重新抛出异常

    try:

      raise NameError('this is a error')

    except NameError:

      print('this error is going')

    raise

    程序输出this error is going 但是最后还是会抛出 this is a error

    自定义异常(类)

    异常类通常应该直接或间接的从 Exception 类派生

    先写一个:

    class my_error(Exception):

      def __init__(self,value):

        self.value = value

      def __str__(self):

        return repr(self.value)

    #调用我们的my_error类

    try:

      raise my_error(2*2)

    except my_error as e:

      print('error is,value:','e.value')

    *********不想写了,这个异常能干什么呢????哈哈哈哈哈**********

    最后写个清理行为finally

    不管有没有发生异常,finally子句 在程序离开 try 后都一定会被执行

    当 try 语句中发生了未被 except 捕获的异常(或者它发生在 except 或 else 子句中)在 finally 子句执行完后它会被重新抛出

     try 语句经由 break ,continue 或 return 语句退 出也一样会执行 finally 子句

    def func(x, y):

    try:

      result = x / y

    except ZeroDivisionError:

      print("division by zero!")

    else:

      print("result is", result)

    finally:

      print("executing finally clause")

    func(2,1)

  • 相关阅读:
    【线程退出】linux线程退出的几个函数
    Apache Doris编译安装记录
    你所不知道的java编程思想
    thinking in java知识小记(一)
    一个程序员的修炼之路
    解决linux不能使用chmod更改权限的问题
    centos6.5配置无线网络
    ubuntu16.04 server安装小记
    vim的基本使用方法
    微信之父张小龙经典演讲164页PPT:《微信背后的产品观》
  • 原文地址:https://www.cnblogs.com/zhouA/p/14506616.html
Copyright © 2020-2023  润新知