zoukankan      html  css  js  c++  java
  • 01Python基础_09异常

      1. try & except

      原程序:

    1 import math
    2 
    3 while True:
    4     text = raw_input('> ')
    5     if text[0] == 'q':
    6         break
    7     x = float(text)
    8     y = math.log10(x)
    9     print "log10({0}) = {1}".format(x, y)
    View Code

      这段代码接收命令行的输入,当输入为数字时,计算它的对数并输出,直到输入值为 q 为止。

      但是当输入0或者负数时,会报错。

      修改后的程序:

    import math
    
    while True:
        try:
            text = raw_input('> ')
            if text[0] == 'q':
                break
            x = float(text)
            y = math.log10(x)
            print "log10({0}) = {1}".format(x, y)
        except ValueError:
            print "the value must be greater than 0"
    View Code

      一旦 try 块中的内容出现了异常,那么 try 块后面的内容会被忽略,Python会寻找 except 里面有没有对应的内容,如果找到,就执行对应的块,没有则抛出这个异常。

    运行结果:

    > -1
    the value must be greater than 0
    > 0
    the value must be greater than 0
    > 1
    log10(1.0) = 0.0
    > q
    View Code

      捕捉所有类型错误:

      将except 的值改成 Exception 类,来捕获所有的异常。

    import math
    
    while True:
        try:
            text = raw_input('> ')
            if text[0] == 'q':
                break
            x = float(text)
            y = 1 / math.log10(x)
            print "1 / log10({0}) = {1}".format(x, y)
        except Exception:
            print "invalid value"
    View Code

      运行结果:

    > 1
    invalid value
    > 0
    invalid value
    > -1
    invalid value
    > 2
    1 / log10(2.0) = 3.32192809489
    > q
    View Code

      进一步完善后的程序:

    import math
    
    while True:
        try:
            text = raw_input('> ')
            if text[0] == 'q':
                break
            x = float(text)
            y = 1 / math.log10(x)
            print "1 / log10({0}) = {1}".format(x, y)
        except ValueError:
            print "the value must be greater than 0"
        except ZeroDivisionError:
            print "the value must not be 1"
        except Exception:
            print "unexpected error"
    View Code

      运行结果:

    > 1
    the value must not be 1
    > -1
    the value must be greater than 0
    > 0
    the value must be greater than 0
    > q
    View Code

      2. finally

      不管 try 块有没有异常, finally 块的内容总是会被执行,而且会在抛出异常前执行,因此可以用来作为安全保证,比如确保打开的文件被关闭。

    try:
        print 1 / 0
    finally:
        print 'finally was called.'

    out: finally was called.

    ---------------------------------------------------------------------------
    ZeroDivisionError                         Traceback (most recent call last)
    <ipython-input-13-87ecdf8b9265> in <module>()
          1 try:
    ----> 2     print 1 / 0
          3 finally:
          4     print 'finally was called.'
    
    ZeroDivisionError: integer division or modulo by zero
    

      如果异常被捕获了,在最后执行:

    try:
        print 1 / 0
    except ZeroDivisionError:
        print 'divide by 0.'
    finally:
        print 'finally was called.'
    
    out: divide by 0.
         finally was called.
    View Code
  • 相关阅读:
    MYSQL查看数据表最后更新时间
    linux在终端模拟软件实现文件上传下载
    yum常用操作
    释放Linux占用端口
    CentOS7.3编译安装MariaDB10.2.6
    CentOS7编译安装Nginx1.10.1
    Linux系统安装ActiveMQ时遇到服务无法启动的问题
    需求分析读书笔记(一)
    实用地址分享
    元素居中汇总
  • 原文地址:https://www.cnblogs.com/zhangyide/p/8206755.html
Copyright © 2011-2022 走看看