• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    一篇文章带你了解python异常基础

    1. 程序中的问题

    1.1 低级语法错误

    低级错误纯属语法错误,代码主要在编写、调试阶段就报错。

    >>> if True
    SyntaxError: invalid syntax
    >>> 
    

    上述错误是初学时很容易犯的语法错误,True后面缺少冒号(:)。

    1.2 中介错误:代码存在隐性错误

    隐形错误主要是指代码编写存在逻辑错误或缺陷,当程序满足特定数据处理条件时,报错或给出错误答案。

    >>> def print_D(dic):
    	i=0
    	len1=len(dic)
    	while i  len1:
    		print(dic.popitem())    #随机删除并返回一个元素
    		i+=1
    		
    >>> print_D({1:'a',2:'b'})
    (2, 'b')
    (1, 'a')
    

    上述代码能够正常运行,但是在实际的程序使用过程中,可能另一个程序员传递一个非字典对象后。

    >>> print_D([1,2,3,4])
    Traceback (most recent call last):
      File "pyshell#11>", line 1, in module>
        print_D([1,2,3,4])
      File "pyshell#9>", line 5, in print_D
        print(dic.popitem())
    AttributeError: 'list' object has no attribute 'popitem'
    

    错误的传递对象导致了正常程序出错,这就是隐性错误。隐性错误的特点是正常情况下程序正常运行,特殊情况下(如边界值没有考虑到,传入数据没有仔细检查类型等)出错。有些隐性错误甚至不报错,而是由结果输出,这是最糟糕的情况。

    1.3 高级错误:软件面对不确定性的异常错误

    高级错误指不确定性的错误,主要指软件的代码本身没有问题,所输入的数据也能得到控制或保证,而是在运行过程中环境所带来的不确定性异常。如:

    (1)软件本身去尝试打开一个文件,而这个文件已经被破坏或独占(独占指一个进程(线程)处理过程,其他进程(线程)无法同步处理,只能等待这个进程(线程)处理完成,其他进程(线程)才能继续操作)。

    (2)软件在往数据库插入数据过程中,突然网络中断,导致数据丢失

    (3)软件运行硬件出现故障,导致软件无法正常运行等

    (4)数据库系统被破坏,软件读写数据报错

    (5)软件输入内容过度复杂或存在错误操作,。

    2. 捕捉异常

    2.1 基本异常捕捉语句

    基本异常捕捉语句语法

    try:
    	代码模块1
    except:
    	代码模块2
    

    try关键字,表示捕捉异常语句的开始;代码模块1,属于正常需要执行的代码模块;except关键字,用于捕捉异常信息,并可以给出出错信息(默认英文提示)。


    (1)先执行try语句,代表捕捉异常机制开始

    (2)执行代码模块1,若没有出错,忽略except关键字和代码模块2,代码正常执行完毕

    (3)若执行代码模块1过程发生异常现象,则终止代码模块1内剩余代码的执行,转到except处

    (4)except关键字捕捉到异常信息,并执行代码模块2(往往给出错误信息提示或做出错后问题处理),异常处理结束

    示例

    >>> def print_D(dic):
    	i=0
    	try:
    		len1=len(dic)
    		while i  len1:
    			print(dic.popitem())
    			i+=1
    	except:
    		print('传递值类型出错,必须为字典类型!')
    		
    >>> print_D({1:'a',2:'b'})
    (2, 'b')
    (1, 'a')
    >>> print_D([1,2,3,4])
    传递值类型出错,必须为字典类型!        #出错后的正确提示信息
    

    2.2 带finally子句的异常处理

    基本格式:

    try:
    	代码模块1
    except:
    	代码模块2
    finally:
    	代码模块3
    

    finally关键字后的代码模块3,运行代码模块1是否出错都会执行的代码功能。

    案例 1

    >>> try:
    	1/0
    except:
    	print('除数不能为0')
    finally:
    	print('出现执行结束')
    >>> 
    

    案例 2

    >>> try:
    	1/2
    except:
    	print('出书不能为0')
    finally:
    	print('出现运行结束')
    >>> 
    

    #运行结果
    0.5
    出现运行结束

    案例 3

    import sys
    try:
    	1/0
    except:
    	print('除数不能为0')
    	sys.exit()
    finally:
    	print('程序执行结束')
    print('我能执行码?')
    >>> 
    

    #运行结果
    除数不能为0
    程序执行结束

    2.3 try-except-else 结构

    结构运行过程:程序进入try语句部分,当try语句部分发生异常则进入except语句部分,若不发生异常进入else语句部分。

    try:
        print("正常代码")
    except Exception as e:
        print("将不会输出这句话")
    else:
        print("这句话将被输出")
    print('-'*30)
    try:
        print(1/0)
    except Exception as e:
        print("进入异常处理")
    else:
        print("不会输出")
    
    >>> 
    

    #运行结果
    正常代码
    这句话将被输出
    ------------------------------
    进入异常处理

    2.4 try-except-else-finally 结构

    try:
        print("没有异常")
    except Exception as e:
        print("不会输出!")
    else:
        print("进入else")
    finally:
        print("必须输出!")
    print('-'*30)
    try:
        print(1/0)
    except Exception as e:
        print("引发异常")
    else:
        print("不会进入else")
    finally:
        print("必须输出!")
    >>>
    

    # 运行结果
    没有异常
    进入else
    必须输出!
    ------------------------------
    引发异常
    必须输出!

    2.5 捕捉特定异常信息

    3. 抛出异常

    python允许程序员自己触发异常,可以通过raise关键字来实现,使用格式:

    raise [Exception]
    

    Exception参数可选,其对象如上表所示的Exception类的子类。

    示例一:不带参数的触发

    >>> raise
    Traceback (most recent call last):
      File "pyshell#52>", line 1, in module>
        raise
    RuntimeError: No active exception to reraise
    >>> 
    

    代码通过raise子句抛出一个没有问题的异常信息。

    示例二:带参数的触发

    >>> i='1'
    >>> if type(i)!=int:
    	raise TypeError('i类型出错!')
    Traceback (most recent call last):
      File "pyshell#57>", line 2, in module>
        raise TypeError('i类型出错!')
    TypeError: i类型出错!
    >>> 
    

    总结

    本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

    您可能感兴趣的文章:
    • python用户自定义异常的实例讲解
    • 一文搞懂python异常处理、模块与包
    • python异常的捕捉和补救实例详解
    • Python抛出引发异常(raise)知识点总结
    • Python异常处理与反射相关问题总结
    上一篇:关于Python Socket编程的要点详解
    下一篇:我在七夕佳节用Python制作的表白神器,程序员也应该拥有爱情!建议收藏
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    一篇文章带你了解python异常基础 一篇,文章,带你,了解,python,