10、异常处理

简单try块使用方法

  1. >>> a=[0,1,2,3,4,5]
    >>>try:
    ...  a[10]
    ... except IndexError:
    ...  print ‘index error~~~~‘
    ...
    index error~~~~

小练习:

循环输出1~50,当键盘输入CTRL+C时,不退出程序而继续进行。

思路:当执行到第567行的时候,按下CTRL+C,程序跳到第8、9行,

然后会继续执行到10行,之后到下一循环

  1.  1 #!/usr/bin/python
     2 import time
     3 for i in range(50):
     4         try:
     5                 print i
     6                 time.sleep(3)
     7                 print ‘~~~~‘
     8         except KeyboardInterrupt:
     9                 print ‘Do not stop me!‘
    10         print ‘+++++‘

小练习:多次捕获异常的例子:

try里面的num可以被外面的捕获调用,因为5~11行和12~13与外层的3、4行都是并列的,因此num也是全局变量

捕获到12行的异常后,程序就执行完了,如果不像退出,继续执行循环,则要把KeyError放到循环里面

  1.  1 #!/usr/bin/python
     2 import time
     3 dict={0:0,1:1,2:2,3:3,4:4,5:5}
     4 input=int(raw_input(‘Please input a number:‘))
     5 try:
     6         for num in range(input):
     7                 try:
     8                         print ‘number ‘,dict[num]
     9                         time.sleep(0.3)
    10                 except KeyboardInterrupt:
    11                         print ‘Do not stop me!‘
    12 except KeyError:
    13         print ‘%s not exist‘%num

小练习:raise 手动触发异常:

  1. #!/usr/bin/python
    try:
            raise NameError
            raise IndexError
    except IndexError:
            print ‘index error!!!‘
    except NameError:
            print ‘name error!!!‘

小练习:制作自定义异常

  1. #!/usr/bin/python
    class myexcept(Exception):          -- 定义异常
            pass
    try:                                -- 触发
            raise myexcept
    except myexcept:                    -- 捕获
            print ‘My error!!!‘

小练习:else块和finally块

1、else块,代码将在try块没有异常抛出的时候执行

2、finally块,无论try块是否抛出异常,永远执行的代码(即使前面代码某处执行了sys.exit(),也就相当于退出前作的最后一件事),通常用来扫尾、关闭文件、链接等动作

3、finally要写在最后

  1.  1 #!/usr/bin/python
     2 class myexcept(Exception):
     3         pass
     4 try:
     5         pass
     6 #       raise myexcept
     7 except myexcept:
     8         print ‘My error!!!‘
     9 else:
    10         print ‘No exception‘
    11 finally:
    12         print ‘finally print~~~‘

小练习:

无论什么异常,都用统一捕获,在except后面留空即可:

  1. #!/usr/bin/python
    try:
            pass
            raise Indexerror
    except :
            print ‘My error!!!‘
    else:
            print ‘No exception‘
    finally:
            print ‘finally print~~~‘

小练习:

抛出异常时带上一段话~~~

  1. #!/usr/bin/python
    import sys
    try:
            pass
            raise IndexError,"line 5,please check it"
    except IndexError,data:
            print data
时间: 2024-10-24 09:12:38

10、异常处理的相关文章

Python之面向对象(七)异常处理

6.10 异常处理 程序中的错误分为两种:语法错误和逻辑错误 语法错误: if #------------------ print(haha 逻辑错误: #用户输入不完整(比如输入为空)或者输入非法(输入不是数字) num=input(">>: ") int(num) 什么是异常:代码发生异常错误之后,你的程序就中断了 什么是异常处理:当代码出现异常时,我通过某种方式不让你程序中断,合理的跳出去,叫做异常处理 为什么要有异常处理?用户体验良好,使你的代码更有健壮性容错性 异

《java基础知识》Java异常处理详解

1. Java 中的异常 前言:Java 中的异常处理是处理程序运行错误时的强大机制之一,它可以保证应用程序的正常流程. 首先我们将了解java异常.异常的类型以及受查和非受查异常之间的区别. 1.1 什么是异常? 字面意义:异常是一种不正常的情况. 在 java 中,异常是扰乱程序正常流程的事件,它是在程序运行时抛出的对象. 1.2 什么是异常处理? 异常处理一种在运行时解决程序错误的机制,例如 ClassNotFound.IO.SQL.Remote 等. 1.2.1 异常处理的优势 异常通常

Java编程思想【温故知新】

第一章:对象导论 1. 抽象过程(类与对象的关系) 类是一类对象的共同行为(成员函数)与状态(成员变量),对象是具体类的实例化.(Eg.人类是一个类,共同的行为:吃,状态:名字.) [类创建者需要考虑这件事情,回头看看这个概念四个字醍醐灌顶,每次创建这个类的时候,想一想这个类是需要什么成员函数与成员变量来满足单一职责的原则] 2. 每个对象都提供服务:程序设计本身的目标就是去创建能够提供服务来解决问题的一系列对象. 3. 被隐藏的具体实现:类创建者与客户端程序员使用者. 往往来说,每个程序员都是

python--JavaScript(js)/上

JavaScript(js) ECMA-----定义的基础语法 DOM------document  object  model BOM------Browser  object  model Javasript 基于对象的,也是面向对象 ECMAScript描述了以下内容: 语法 类型 语句 关键字 保留字 运算符 对象(封装 继承 多态)基于对象的语言 使用对象 JavaScript的引入方式 直接编写: <script> alert(123) </script> 导入文件 &

C#知识整理(转自键盘演绎青春)

这里简单介绍了一些常用的属性,以及一些术语的解释和举例说明,不太全面,希望读者多多补充. 1.重载:函数名相同,参数的个数或参数类型不同; public void MyDog(string s); public void MyDog(int i); public void MyDog(string s,int i); 2.继承:一个类继承另一个类中的成员,被继承的叫做基类,继承类叫做派生类; class A { 成员; } class B:A //继承的写法 派生类:基类 { 成员; } 3.多

python学习-爬虫

转载自 静觅的博客 最普通下载网页 1 import urrlib2 2 response = urllib2.urlopen("http://www.baidu.com") 3 print response.read() Post方式 1 import urllib 2 import urllib2 3 4 values = {"username":"*****", "password":"*****"}

oracle12 pl/sql

pl/sql块介绍 介绍   块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块,要完成相对简单的应用功能,可能只需要编写一个pl/sql块,但是如果想要实现复杂的功能,可能需要在一个pl/sql块中嵌套其它的pl/sql块. 块结构示意图 pl/sql块由三个部分构成:定义部分,执行部分,例外处理部分. 如下所示: declare /*定义部分——定义常量.变量.游标.例外.复杂数据类型*/ begin /*执行部分——要执行的pl/sql语句和sq

Spring常用代码

1.String conf="applicationContext.xml"; ApplicationContext atc=new ClassPathXmlApplicationContext(conf); 2.指定扫描类路径 <context:component-scan base-package="com.tarena"></context:component-scan> 3.扫描db.perproties文件配置 <util:p

Struts 2零配置

从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该插件完全抛弃配置信息,不仅不需要是使用struts.xml文件进行配置,甚至不需要使用Annotation进行配置,而是由struts2根据约定自动配置. 如何使用Convention 1.       将struts-Convention-plugin-2.1.6.jar文件复制到WEB-INF/

C#知识整理笔记

这里简单介绍了一些常用的属性,以及一些术语的解释和举例说明,不太全面,希望读者多多补充. 1.重载:函数名相同,参数的个数或参数类型不同; public void MyDog(string s); public void MyDog(int i); public void MyDog(string s,int i); 2.继承:一个类继承另一个类中的成员,被继承的叫做基类,继承类叫做派生类; class A { 成员; } class B:A //继承的写法 派生类:基类 { 成员; } 3.多