zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率)
    C# WinForm窗体及其控件自适应各种屏幕分辨率
    Socket网络编程
    C# Socket编程
    获取当前程序目录
    C# winfrom界面跳转闪烁问题解决方法
    C# 屏蔽windows功能键
    c#多线程调用有参数的方法
    C# winform Visual Studio Installer打包教程
    查询重复的数据
  • 原文地址:https://www.cnblogs.com/zhouA/p/14506616.html
Copyright © 2011-2022 走看看