简单try块使用方法
-
>>> 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 #!/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 #!/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 手动触发异常:
-
#!/usr/bin/python try: raise NameError raise IndexError except IndexError: print 'index error!!!' except NameError: print 'name error!!!'
小练习:制作自定义异常
-
#!/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 #!/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后面留空即可:
-
#!/usr/bin/python try: pass raise Indexerror except : print 'My error!!!' else: print 'No exception' finally: print 'finally print~~~'
小练习:
抛出异常时带上一段话~~~
-
#!/usr/bin/python import sys try: pass raise IndexError,"line 5,please check it" except IndexError,data: print data