zoukankan      html  css  js  c++  java
  • python学习第十八天 --错误&异常处理

    这一章节主要讲解python的错误和异常处理

    什么是错误和异常?及其区别?

    错误:

    1、语法错误:代码不符合解释器或者编译器语法。
    2、逻辑错误:不完整或者不合法输入或者计算出现问题。
     
    异常:执行过程中出现问题导致程序无法执行。
    1、程序遇到逻辑或者算法问题。
    2、运行过程中计算机错误(内存不够或者IO错误)。
     
    错误和异常的区别:
    错误:代码运行前的语法或者逻辑错误,语法错误在执行前修改,逻辑错误无法修改。
     
    异常分为两个步骤:
    1、异常产生,检查到错误且解释器认为是异常,抛出异常。
    2、异常处理,截获异常,忽略或者终止程序处理异常。
     
    常见错误:
    1:a:NameError
    2.if True:SyntaxError
    3.f = open('1.txt'):IOError
    4.10/0:ZeroDivisionError
    5.a =int('dd'):ValueError

    try-except用法

    try:
    try_suite
    except Exception[e]:
    exception_block
    else:
    nor - exception
    规则
    1.try用来捕获try_suite中的错误,并且将错误交给except处理.
    2.except用来处理异常,如果处理异常和设置捕获异常一致,使用exception_block处理异常.
    3.不能捕获语法错误,如果处理异常和设置捕获异常不一致,会将异常抛给python解释器.
    try:
        a = int('dd')
    except ValueError,e:
        print 'catch exception: %s'% e
    
        
    catch exception: invalid literal for int() with base 10: 'dd'
    4.try未捕获的try_suite中的错误,输出else:nor-exception.
    try:
        a = int('4')
    except ValueError,e:
        print 'catch exception: %s'% e
    else:
        print 'nor exception'
    
    nor exception

    5.一旦try捕获到了错误,接下来错误后的代码将不执行,直接执行except.

    try:
        a = int('dd')
        print 'success convert to int!'//一旦出现错误被捕获,这句代码将不执行
    except ValueError,e:
        print 'catch exception: %s'% e
    else:
        print 'nor exception'
    
        
    catch exception: invalid literal for int() with base 10: 'dd'

    6.处理多个异常时,如果捕获到异常后,会按顺序逐个匹配。

    try:
        a = int('dd')
        b = 20/0
        print 'success convert to int!'
    except ZeroDivisionError,e:
        print 'catch ZeroDivisionError:%s'% e
    except ValueError,e:
        print 'catch ValueError: %s'% e
    else:
        print 'nor exception'
        
    catch ValueError: invalid literal for int() with base 10: 'dd'

    try-finally用法

    规则:
    1、try-finally无论是否检测到异常,都会执行finally代码.
    2. 作用是为异常处理事件提供清理机制,用来关闭文件或者释放资源.
     
    情况一:
    try:
    try_suite
    finally:
    do_finally
    1.如果try语句没有捕获错误,代码执行do_finally.
    2.如果try语句捕获异常,程序首先执行do_finally.然后将捕获到的异常抛给python解释器.
    try:
        b = 20/0
    finally:
        print 'run to finally'
    
    run to finally
    
    Traceback (most recent call last):
      File "<pyshell#178>", line 2, in <module>
        b = 20/0
    ZeroDivisionError: integer division or modulo by zero
    try:
        b = 20/2 //不管是否有错误,都会执行finally
    finally:
        print 'run to finally'
     
    run to finally

    情况二:

    try:
    try_suite
    except:
    do_except
    finally:
    do_finally
    规则:
    1.若try语句没有捕获异常,执行完try代码段后,执行finally.
    2若try捕获异常,首先执行except处理错误,然后执行finally.
    try:
        b = 20/0
    except ZeroDivisionError,e:
        print 'catch ZeroDivisionError %s'% e
    finally:
        print 'run to finally'
    
    catch ZeroDivisionError integer division or modulo by zero
    run to finally//即使捕获到异常后,都会执行finally

    情况三:

    try:
    try_suite
    except:
    do_except
    else:
    do_else
    finally:
    do_finally
    规则:
    1.若try语句没有捕获异常,执行完try代码段后,执行else代码段,最后执行finally。
    2、若try捕获异常,首先执行except处理错误,然后执行finally。
    try:
        a = '7'
        b = 20/(int(a))
    except ValueError,e:
        print 'catch ValueError:%s'% e
    else:
        print 'nor exception'
    finally:
        print 'run to finally'
        
    nor exception
    run to finally

    raise 和 assert用法

    raise语句用于主动抛出异常.
    语法格式:raise[exception[,args]]
    exception:异常类  args:描述异常信息元组 example:raise IOError ‘IO exception’
    while True:
        num = int(raw_input('enter 1~100:'))
        if num == 0:
            raise ZeroDivisionError('Value invalid')//主动抛出异常,中断程序
        else:
            result = 100/num
        
    enter 1~100:0
    
    Traceback (most recent call last):
      File "<pyshell#208>", line 4, in <module>
        raise ZeroDivisionError('Value invalid')
    ZeroDivisionError: Value invalid 
    assert语句用于检测表达式是否为真,如果为假,引发AsserttionError错误。
    语法格式:assert expression[,args] expression:表达式  args:判断条件的描述信息  example:assert n==1,'n is ont 1'
     
    def bar(s):
        num = int(s)
        assert num!=0,'n is zero!'
        return 10/num
    
    >>> bar('0')
    
    Traceback (most recent call last):
      File "<pyshell#217>", line 1, in <module>
        bar('0')
      File "<pyshell#216>", line 3, in bar
        assert num!=0,'n is zero!'
    AssertionError: n is zero

     启动Python解释器时可以用-O参数来关闭assert。

    >>>python -o error.py

    关闭后,你可以把所有的assert语句当成pass来看。

     
     
  • 相关阅读:
    (转)水经注谷歌地图的级别与对应比例尺及分辨率探究
    oracle 单表导出导入
    案例情景--在一次Oracle 数据库导出时 EXP-00008;ORA-00904:EXP-00000: oracle不同版本导入导出规则
    权衡微服务
    ASP.NET Core HTTP 管道中的那些事儿
    ASP.NET Core 中间件之压缩、缓存
    .NET Core 首例 Office 开源跨平台组件(NPOI Core)
    ASP.NET Core 之 Identity 入门(三)
    Entity Framework Core 1.1 升级通告
    ASP.NET Core 1.1.0 Release Notes
  • 原文地址:https://www.cnblogs.com/nx520zj/p/5765581.html
Copyright © 2011-2022 走看看