我们写完python执行的时候是不是经常会遇到报错,而且报错都是大片红字,这样给别人的感受就是你写的程序怎么老是出问题啊,这样我们还咋么混下去呢?于是乎,就有了异常处理的东东。

  python的try语句有两种风格---一种是处理异常(try/except/else),一种是无论是否发生异常都将执行最后的代码(try/finally)。

第一种处理异常如下:
try:
<语句>        #运行代码
except <异常的名字>:
<语句>         #哪个异常符合执行哪个
except <异常的名字> as <报错的信息>:
<语句>        #报错信息可以以变量形式打印
else:
<语句>       #没有异常时执行

第二种处理异常如下:

try:

<语句>
except <异常的名字>:
<语句>       
finally:
<语句>   #退出时总是执行
 
举两个实例看下:
第一个实例:
try:
open("test.txt",'r') #打开一个不存在的文件
except IOError: #捕捉这个异常
pass #表示实现了相应的实现,但什么也不做。 第二个例子:


try语句子句形式表如下
except:            捕获所有异常
except name:        只捕获特定的异常
except name as value:    捕获异常和它的附加数据
except (name1,name2):    捕获任何列出的异常
else:            如果没有异常
finally:        总是执行
 
 

常见异常:

Exception                        所有异常的基类

AttributeError                 特性应用或赋值失败时引发

IOError                             试图打开不存在的文件时引发

IndexError                       在使用序列中不存在的索引时引发

KeyError                          在使用映射不存在的键时引发

NameError                       在找不到名字(变量)时引发

SyntaxError                     在代码为错误形式时引发

TypeError                         在内建操作或者函数应用于错误类型的对象是引发

ValueError                       在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发

ZeroDivisionError          在除法或者摸除操作的第二个参数为0时引发

还有一个就是主动触发异常(raise)。

raise语法格式如下:

raise [Exception [, args [, traceback]]]

语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

格式如下:

try:
raise TypeError('类型错误')
except Exception as e:
print(e) 举个例子:
try:
for i in range(3):
for i in range(3):
if i == 2:
raise KeyboardInterrupt
print(i,j)
except KeyboardInterrupt:
print('退出!')

学了以上的知识点后,我们可以来看下底下这个例子:

try:
f = open('test1.txt','r') #提示:打开不存在文件就出错了,此时还未打开文件,因此根本就没有f这个变量
f.read()
except IOError as e:
print('错误:',e)
except SyntaxError:
pass
except NameError as msg:
print('错误:'+str(msg))
except:
print('对的,都是你的错')
else:
print('读取成功')
finally:
f.close() #无论咋样都要关闭文件

看完之后你们觉得这个会有什么问题呢?

最后在文件关闭的时候会报错如下:

那我们怎么规避呢?思考下吧~~~~

答案如下:

try:
f = open('test1.txt','r')
f.read()
except IOError as e:
print('错误:',e)
except SyntaxError:
pass
except NameError as msg:
print('错误:'+str(msg))
except:
print('对的,都是你的错')
else:
print('读取成功')
finally:
if 'f' in locals(): #如果文件对象变量存在当前局部变量符号表的话就说明打开成功了
f.close()

简单吧,嘻嘻^-^

零基础学习python_异常处理(32-33课)的更多相关文章

  1. 零基础学习python_文件(28-30课)

    本人小白一枚,随着现在对测试要求越来越高,动不动就要去会一门编程语言,没办法只能学习学习Python,今天看到几个月前还是菜鸟的人突然就已经能使用Python写简单系统了,没办法,虽然之前也简单学习过 ...

  2. 零基础学习python_爬虫(53课)

    1.Url的格式简单介绍,如下图: 2.我们要对网站进行访问,需要用到python中的一个模块或者说一个包吧,urllib(这个在python2中是urllib+urllib2,python3将这两个 ...

  3. 零基础学习python_字符串(14-15课)

    今天回顾下我之前学习python的第一个对象——字符串,这个对象真蛋疼,因为方法是最多的,也是最常见的类型,没有之一... 内容有点多,我就搜了下网上的资料,转载下这个看起来还不错的网址吧:http: ...

  4. 零基础学习python_字典(25-26课)

    今天学到后面的知识,突然发现之前学习到的字典列表啥的都有点忘了,打算补一下之前学到的字典,到时候你看的时候,字符串.列表.字典.元祖这几个没啥顺序,刚开始学的时候了解下方法,当然你可以死记硬背下,后面 ...

  5. 零基础学习python_模块(50-52课)

    今天学了下模块,那什么是模块呢?其实我们写的以py结尾的一个文件就是一个模块,模块也就是程序 还记得我们之前学过容器.函数.类吧 容器    ->    数据的封装 函数    ->   ...

  6. 零基础学习python_生成器(49课)

    一个生成器函数的定义很像一个普通的函数,除了当它要生成一个值的时候,使用yield关键字而不是return.如果一个def的主体包含yield,这个函数会自动变成一个生成器(即使它包含一个return ...

  7. 零基础学习python_类和对象(36-40课)

    今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...

  8. 零基础学习python_魔法方法(41-48课)(迭代器)

    接下来这个为啥要叫魔法方法呢,额,这个嘛我是跟小甲鱼的视频取的名字一样的,因为会讲比较多杂的东西,有... 魔法方法详细阅读地址:http://bbs.fishc.com/thread-48793-1 ...

  9. 零基础学习python_列表和元组(10-13课)

    一时兴起今天又回过头来补一下列表和元组,先来说说列表哈,列表其实是python最经常用到的数据类型了,不仅经常用还很强大呢,这个跟C语言里面的数组是类似的,列表当然也可以增删改查,不过我可没打算用之前 ...

随机推荐

  1. Linux 下Tomcat单机多应用

    修改/etc/profile 下,增加如下两个tomcat的配置.apache-tomcat-8.0.50为第一个tomcat, apache-tomcat-8.0.50_2为第二个tomcat ex ...

  2. NET设计模式 第二部分 创建型模式(4):工厂方法模式(Factory Method)

    工厂方法模式(Factory Method) ——.NET设计模式系列之五 Terrylee,2004年1月2日 概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实 ...

  3. 在Python中调用Java扩展包HanLP测试记录

    最近在研究中文分词及自然语言相关的内容,关注到JAVA环境下的HanLP,HanLP是一个致力于向生产环境普及NLP技术的开源Java工具包,支持中文分词(N-最短路分词.CRF分词.索引分词.用户自 ...

  4. Spark版本说明

    Source code: Spark 源码,需要编译才能使用,另外 Scala 2.11 需要使用源码编译才可使用   Pre-build with user-provided Hadoop: &qu ...

  5. JavaScript学习总结(三、函数声明和表达式、this、闭包和引用、arguments对象、函数间传递参数)

    一.函数声明和表达式 函数声明: function test() {}; test();    //运行正常 function test() {}; 函数表达式: var test = functio ...

  6. SSH实现隧道功能穿墙

    Putty和SSH tunnel 目前寻求FQ的方式无非就几种: 寻找web代理(这个可以进我放置的在线代理进行测试) 自行寻找http/sock5代理(这个可以去网上搜索代理ip) vpnFQ(目前 ...

  7. ubuntu 17.10.1 安装 virtual box 增强工具

    ubuntu 17.10.1 安装 virtual box 增强工具遇到 “  Please install the gcc make perl packages from your distribu ...

  8. 【ThreadLocal】使用ThreadLocal实现线程安全

    非线程安全 public class UnSafeThreadLocalDemo { private int count = 0; public static void main(String[] a ...

  9. html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件

    html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件

  10. Java-Runoob-高级教程-实例-方法:08. Java 实例 – break 关键字用法

    ylbtech-Java-Runoob-高级教程-实例-方法:08. Java 实例 – break 关键字用法 1.返回顶部 1. Java 实例 - break 关键字用法  Java 实例 Ja ...