python学习笔记异常处理(七)

异常处理

异常处理是工作中编写代码必须要完成的内容,对于不符合预期的操作,程序总会出现异常情况,而对异常情况能够妥善处理,是保证程序稳定性的关键。

>> f = input("filename")
filename/hone/a.py
>> ff = open(f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: ‘/hone/a.py‘

以上代码,用户输入的文件不存,系统抛出文件不存在的异常,类型是FileNotFoundError。

python异常类型有很多,常见的类型如下:

  • NameError:访问一个未定义的变量
  • SyntaxError:语法错误,严格上讲是程序的错误
  • IndexError:对于一个序列,访问的索引操作范围
  • KeyError:访问一个不存在的字典key
  • ValueError:传入无效的参数
  • AttribueError:访问类对象中不存在的属性

异常处理

如果出现了异常,我们不可以直接将异常抛给用户,应该使用python的异常处理方法来捕获并处理异常,处理方法为try,except,finally三个关键字。

try:
    有可能抛出异常的代码
except 异常类型名称:
    处理代码
except 异常类型名称:
    处理代码

来源: 实验楼
链接: https://www.shiyanlou.com/courses/1013
本课程内容,由作者授权实验楼发布,未经允许,禁止转载、下载及非法传播

except可以有多个,每个处理不同类型的异常,也可以不写任何异常类型名称,则会处理所有捕获的异常。

以上代码使用异常处理改进:

>> filename = input(‘filename‘)
filename/home/a.py
>> try:
... f = open(filename)
... print(f.read)
... f.close()
... except FileNotFoundError:
... print(‘File not found‘)
...
File not found

finally关键字是用来进行清理工作,经常和except一起使用,即无论是正常还是异常,finally块里面的代码都会执行。
如果一个文件处理的程序中异常出现在 f.write() 向文件中写入数据的时候,就无法执行 close 操作,使用 finally 可以保证无论 try 代码块中的代码是否抛出异常,都能够执行 finally 代码块里的内容,保证文件被正常关闭。

修改上述的程序如下,改为写入操作,引入 finally 保证文件可以被正常关闭:

filename = ‘/etc/protocols‘
f = open(filename)
try:
    f.write(‘shiyanlou‘)
except:
    print("File write error")
finally:
    print("finally")
    f.close()

程序运行的结果:

File write error
finally

表示虽然异常,但仍然执行到了 finally 代码块。

这里需要说明下抛出异常的原因是以只读的模式打开了一个文件,但尝试向文件中写入内容,所以会抛出异常。另外 except: 这个语句后不写任何参数,表示将处理所有 try 代码块中抛出的异常。

抛出异常
如果我们希望在程序执行过程中抛出一些异常,该如何操作呢?可以使用 raise 语句。

raise 异常名称
例如,我们在代码里希望抛出一个 ValueError,直接使用:

raise ValueError()
外部的代码就可以使用 except ValueError 进行捕获和处理了。

原文地址:http://blog.51cto.com/cqtesting/2070609

时间: 2024-08-28 22:40:33

python学习笔记异常处理(七)的相关文章

python学习笔记(七)函数

原链接:http://www.cnblogs.com/vamei/archive/2012/06/01/2529500.html#!comments 函数学习遇到了问题 1 #!/usr/bin/env python 2 #coding=utf-8 3 #今天开始学习函数 4 def square_sum(a, b): 5 c = a**2 + b**2 6 return c 7 #其实学习python 过来,一直没有很好的编程的思维,思维总是会受到最初yi脚本的限制 8 #期待突破吧 9 10

Python学习笔记(七)函数的使用

python中的函数使用较简单,这里列出值得注意的几点:   内嵌函数   例如: # coding: utf-8 def foo(): def bar(): print 'bar() called.' print 'foo() called.' foo() bar() 对bar的调用是非法的,因为bar的作用域仅限于foo内,除非使用闭包将其返回. # coding: utf-8 def foo(): def bar(): print 'bar() called.' print 'foo()

python学习笔记-(七)python基础--集合、文件操作&amp;函数

本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: 1 2 3 4 >>> list_1 = [1,4,4,5,6,7,9,10] >>> list_1 =set(list_1) >>> print(list_1) {1, 4, 5, 6, 7, 9, 10} 2)关系测试:测试两组数据之间的关系,交集.并集.

流畅的python学习笔记第七章:装饰器

装饰器就如名字一样,对某样事物进行装饰过后然后返回一个新的事物.就好比一个毛坯房,经过装修后,变成了精装房,但是房子还是同样的房子,但是模样变了. 我们首先来看一个函数.加入我要求出函数的运行时间.一般来说代码写成如下.但是我有很多个函数都要计算运行时间.每个函数里面都要写一个计时的过程是一件很麻烦的事. def target():     start=time.time()     print 'running target()'     end=time.time()     print e

[python]python学习笔记(七)——加密

1,python对字符串加密常见的方法: [python] view plaincopy <pre code_snippet_id="340592" snippet_file_name="blog_20140512_1_2282504" name="code" class="python">1. 最简单的方法是用base64: import base64 s1 = base64.encodestring('hell

Python学习笔记(异常处理)

用户输入了一个不合规定的值,或者需要打开的文件不存在.这些情况被称作"异常",一个好的程序需要能处理可能发生的异常,避免程序因此而中断. 例如我们去打开一个文件: f = file('non-exist.txt') print 'File opened!' f.close() 假如这个文件因为某种原因并没有出现在应该出现的文件夹里,程序就会报错: IOError: [Errno 2] No such file or directory: 'non-exist.txt' 程序在出错处中断

Python学习笔记(七) 常见问题记录

Non-UTF-8 code starting with '\xbb' in file douban.py on line 5, butno encoding declared; see http://python.org/dev/peps/pep-0263/ for details 编码格式的问题,提示页面给出了解决办法: Defining Python Source Code Encodings To define a source code encoding, a magic commen

Python 学习笔记(七)Python字符串(一)

字符串 字符串或串(String)是由数字.字母.下划线组成的一串字符,用双引号或单引号包裹的为字符串 1 >>> "hello world" 2 'hello world' 3 >>> 'hello world' 4 'hello world' 5 >>> "250" 6 '250' 7 >>> type("200") 8 <type 'str'> 下面示例:

Python学习笔记(七)—— 循环

一.for ... in ... 循环 1.语法 names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name) (1)需要有冒号 (2)就是将每个元素带入到name中,然后进行缩进模块的语句 2.range()函数:可以生成一个整数序列 例如range(5),生成从0开始小于5的整数序列 >>> list(range(5)) [0, 1, 2, 3, 4] 二.while循环 sum = 0 n = 99 while