zoukankan      html  css  js  c++  java
  • Python3-2020-测试开发-22- 异常

    Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

    一、异常处理

    1. try...except....

    """1. try...except...."""
    
    try:
        a = 3/0
    except BaseException as e:
    
        print(e)
        print(type(e))
    
    
    
    ——————————————————————————————
    division by zero
    <class 'ZeroDivisionError'>

    2. try...except...except...except...

    """2. try...except...except...except..."""
    # 一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行 

    3. try...except....else   

    如果有异常执行except,没有异常执行else
    """3. try...except....else"""
    # 如果有异常执行except,没有异常执行else
    try:
    
        a = 3/2
    
    except BaseException as e:
    
        print(e)
    
    else:
    
        print("无异常!")   # 无异常!
    
    
    ___________________________________________
    无异常!

    4. try...except...else...finally...

    finally块无论是否发生异常都会被执行,通常用来释放try块中的申请资源
    """4. try...except...else...finally..."""
    # finally块无论是否发生异常都会被执行,通常用来释放try块中的申请资源
    
    try:
    
        f = open("/Users/chushujin/chushujin/myworkspsace/csjin-Test/mypythonscript","r")
        content = f.readline()
        print(content)
    except IOError as e:
    
        print(e)
    finally:
        pass

    5. return语句一般不放在try...except...else...finally块中,建议放到最后

    """5. return语句一般不放在try...except...else...finally块中,建议放到最后"""
    def test001():
    
        try:
            print("1")
        except Exception as e:
            print(e)
        finally:
            print("结束")
    
        return "1"

    二、常见的异常

    1. 语法错误:invalid syntax

    # 6.1 语法错误:invalid syntax
    
      int a =3
    
    
    
    ——————————————————————————————————
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test01.py", line 61
        int a =3
        ^
    IndentationError: unexpected indent

    2. 尝试访问一个没有申明的变量:NameError: name 'b' is not defined

    # 6.2 尝试访问一个没有申明的变量:NameError: name 'b' is not defined
    
     print(b)
    
    ——————————————————————————————
    
    Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test01.py", line 66, in <module>
        print(b)
    NameError: name 'b' is not defined

    3. 除数不能为0:ZeroDivisionError: division by zero

    #6.3 除数不能为0:ZeroDivisionError: division by zero
    
    # a = 3/0
    
    ———————————————————————————————————
    Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test01.py", line 70, in <module>
        a = 3/0
    ZeroDivisionError: division by zero

    4. 数值错误:ValueError: could not convert string to float: '褚'

    # 6.4 数值错误:ValueError: could not convert string to float: '褚'
    # float("褚")
    
    ————————————————————————————————
    Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test01.py", line 73, in <module>
        float("")
    ValueError: could not convert string to float: ''

    5. 类型错误:TypeError: unsupported operand type(s) for +: 'int' and 'str'

    # 6.5 类型错误:TypeError: unsupported operand type(s) for +: 'int' and 'str'
     123+"abc"
    
    
    ——————————————————————————————————
    Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test01.py", line 76, in <module>
        123+"abc"
    TypeError: unsupported operand type(s) for +: 'int' and 'str'

    6. 访问对象的不存在的属性:AttributeError: 'str' object has no attribute 'say'

    # 6.6 访问对象的不存在的属性:AttributeError: 'str' object has no attribute 'say'
    a = "666"
     a.say()
    
    ——————————————————————————————————
    
    
    Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test01.py", line 80, in <module>
        a.say()
    AttributeError: 'str' object has no attribute 'say'

    7. 索引越界异常:IndexError: string index out of range

    # 6.7 索引越界异常:IndexError: string index out of range
    b = [1,2,3]
     a[10]
    
    ——————————————————————————————————
    Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test01.py", line 84, in <module>
        a[10]
    IndexError: string index out of range

    8. 字段关键字不存在:KeyError: 'n'

    # 6.8 字段关键字不存在:KeyError: 'n'
    d = {"name":"chu"}
    d['n']
    
    ——————————————————————————————————
    Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test01.py", line 88, in <module>
        d['n']
    KeyError: 'n'

    三、使用with  content_expr [as f]:自动关闭。无需手动关闭文件

    import os
    
    
    path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
    # ('C:\chushujin\study\mypythonscript\src\com.csjin.qa2020\TestException', 'Test02.py')
    print(path)
    
    path_txt = os.path.join(path,"test.txt")
    
    """ with context_expr [as f]"""
    
    with open(path_txt,encoding="utf-8") as f:
    
        print(f.readline())

    四、traceback模块使用

    1. 打印详细信息

    """traceback使用"""
    import os
    
    path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
    # ('C:\chushujin\study\mypythonscript\src\com.csjin.qa2020\TestException', 'Test02.py')
    print(path)
    
    path_txt = os.path.join(path,"test.txt")
    
    import traceback
    
    try:
    
        a = 3/0
    
    except:
    
        traceback.print_exc()
    
    ——————————————————————————————————
    
    """
    Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test03.py", line 9, in <module>
        a = 3/0
    ZeroDivisionError: division by zero
    """

    2. 将异常写入文件

    try:
    
        a = 3/0
    
    except:
    
        # 将错误信息输入至文件
        with open(path_txt,"a") as f:
    
            traceback.print_exc(file=f)

    文件中展示为:

    111111111111111111Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test03.py", line 32, in <module>
        a = 3/0
    ZeroDivisionError: division by zero
    Traceback (most recent call last):
      File "C:/chushujin/study/mypythonscript/src/com.csjin.qa2020/TestException/Test03.py", line 32, in <module>
        a = 3/0
    ZeroDivisionError: division by zero

    五、自定义异常

    Python 使用 raise 语句抛出一个指定的异常。

    raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

    只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

    """自定义异常"""
    
    
    class AgeError(Exception):
    
        def __init__(self,errorInfo):
    
            Exception.__init__(self)
            self.errorInfo = errorInfo
    
    
        def __str__(self):
    
            return str(self.errorInfo)+"年龄错误"
    
    
    
    ############################################
    if __name__ == '__main__':
    
        age = int(input("请输入一个数字:"))
    
        if age < 1 or age >150:
    
            raise AgeError(age)
    
        else:
    
            print("年龄正常")
    
    
    """
    __main__.AgeError: 200年龄错误
    """
  • 相关阅读:
    Ext.Net学习笔记02:Ext.Net用法概览
    Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
    【转】好的用户界面-界面设计的一些技巧
    发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容
    抢票季:吐槽12306 & 分享抢票经验
    2.5星|《解谜茑屋》:疑似企业公关稿,对话体,信息含量较低
    樊登推荐过的书15本,好书2本半
    一些黑猩猩会使用草药治病,疗效还不错:3.5星|邓巴《人类的算法》
    莫奈塞尚的知名度,主要归功于富豪画家卡耶博特的遗赠:4星|《引爆流行》
    4星|《猎药师》:五千年以来药物研发简史,作者是前一线科学家
  • 原文地址:https://www.cnblogs.com/chushujin/p/13182596.html
Copyright © 2011-2022 走看看