zoukankan      html  css  js  c++  java
  • Python——异常处理

    异常处理机制可以使程序有更好的容错性,提高程序健壮性;当程序运行时出现意外情况时,系统会自动生成一个Error对象通知程序。

    一、try...except

    异常处理机制的语法结构如下:

    try:
        # 业务实现代码
    exception (Error1,Error2....) as e:
        # 异常处理逻辑代码
    

    业务实现代码没有异常,例:

    try:
    	print ('没有异常')
    except Exception as e:
    	print ('出现异常:%s'%e)
    
    # 运行结果
    没有异常
    

    上面例子可以看出,当业务实现代码没有出现异常时,并不会运行except中的异常处理逻辑代码。

    业务逻辑代码有异常,例:

    try:
    	print ('业务逻辑代码运行中...')
    	p
    	print ('业务逻辑代码运行结束...')
    except Exception as e:
    	print ('出现异常:%s'%e)
    
    # 运行结果
    业务逻辑代码运行中...
    出现异常:name 'p' is not defined
    

    上面例子可以看出,当业务实现代码出现异常时,会自动生成异常对象提交给Python解释器,Python解释器会寻找能处理该异常对象的except块,如果找到,则把异常对象交给except块处理;如果Python解释器找不到except块,则运行时环境终止,Python解释器将会退出。

    关于Python异常类型,可百度查看。

    二、多异常捕获

    在Python中,一个except块可以捕获多种类型的异常,只需把多个异常类用圆括号括起来,中间用逗号隔开(即元组)。

    例:

    try:
        a
    except (SyntaxError,IndentationError,NameError) as e:
        print ('出现错误:语法错误缩进错误未声明/初始化对象 (没有属性)',e)
    
    # 运行结果
    出现错误:语法错误缩进错误未声明/初始化对象 (没有属性) name 'a' is not defined
    

    上面例子中,except块会捕获SyntaxError,IndentationError,NameError三种异常。因为在try中出现了NameError错误,所以会运行except块中的异常处理逻辑代码。

     三、else块

    python异常处理流中可以添加else块,else块会做try块没有出现异常时运行。

    例:

    try:
    	a = 1
    	print ('正在运行try块...')
    except (SyntaxError,IndentationError,NameError) as e:
    	print ('出现错误:语法错误缩进错误未声明/初始化对象 (没有属性)',e)
    else:
    	print ('try块没有出现异常,运行else块!')
    
    # 运行结果
    正在运行try块...
    try块没有出现异常,运行else块!

    如果try块出现异常,则else块不会运行,例:

    try:
    	print ('正在运行try块...')
    	b
    except (SyntaxError,IndentationError,NameError) as e:
    	print ('出现错误:语法错误缩进错误未声明/初始化对象 (没有属性)',e)
    else:
    	print ('try块没有出现异常,运行else块!')
    
    # 运行结果
    正在运行try块...
    出现错误:语法错误缩进错误未声明/初始化对象 (没有属性) name 'b' is not defined
    

    四、finally块

    python的finally块在异常处理流中,不管try块中是否出现异常,都会执行,我们可以使用finally块执行回收资源的操作。

    例:

    try:
    	print ('正在运行try块...')
    	b
    except (SyntaxError,IndentationError,NameError) as e:
    	print ('出现错误:语法错误缩进错误未声明/初始化对象 (没有属性)',e)
    else:
    	print ('try块没有出现异常,运行else块!')
    finally:
    	print ('不管try块是否出现异常,都会运行finally块!')
    
    # 运行结果	
    正在运行try块...
    出现错误:语法错误缩进错误未声明/初始化对象 (没有属性) name 'b' is not defined
    不管try块是否出现异常,都会运行finally块!
    

    即使在try块或者except块中执行了return语句,finally块也会被执行,但是如果在finally块中使用了return或者raise语句,将会导致try块和except块中的return和raise语句失效。

    例:

    def test():
    	try:
    		print ('正在运行try块...')
    		b = 'try块运行结束。'
    		return b
    	except (SyntaxError,IndentationError,NameError) as e:
    		d = '出现错误:语法错误缩进错误未声明/初始化对象 (没有属性)' + e
    		return d
    	else:
    		print ('try块没有出现异常,运行else块!')
    	finally:
    		p = '不管try块是否出现异常,都会运行finally块!'
    		print (p)
    
    print (test())
    
    
    # 运行结果
    正在运行try块...
    不管try块是否出现异常,都会运行finally块!
    try块运行结束。
    

    上面的例子中可以看出异常处理流的运行过程,先运行了try块,try块中没有出现异常,运行else块,然后再运行finally块,最后再跳回执行try块(except块)的return(raise)语句。

    如果在finally块中执行了return或raise语句,则不再跳回执行try块或者except块的任何代码,例:

    def test():
    	try:
    		print ('正在运行try块...')
    		b = 'try块运行结束。'
    		return b
    	except (SyntaxError,IndentationError,NameError) as e:
    		print ('正在运行except块...')
    		return e
    	else:
    		print ('try块没有出现异常,运行else块!')
    	finally:
    		p = '不管try块是否出现异常,都会运行finally块!'
    		return p
    
    print (test())
    
    # 运行结果
    正在运行try块...
    不管try块是否出现异常,都会运行finally块!
  • 相关阅读:
    前端学习资源
    CSS样式属性单词之Left
    CSS 解决 a标签去掉下划线 text-decoration: none无效 的解决方案
    CSS二级菜单
    position属性absolute与relative 详解
    CSS行高——line-height
    VS code注释快捷键
    CSS padding margin border属性详解
    block(块级元素)和 inline(内联元素) 的区别
    css(float浮动和clear清除)
  • 原文地址:https://www.cnblogs.com/mingmingming/p/11233500.html
Copyright © 2011-2022 走看看