异常处理:首先了解异常,程序出现逻辑错误或者用户输入不合法都会引发异常,而这些异常并不是致命的所以不会导致程序崩溃死掉。可以利用Python提供的异常处理机制在异常出现时及时捕获,并从内部自我消化。

  接下来一个例子来说明异常:

 file_name=input('请输入要打开的文件名:')
f=open(file_name,'r')
print('文件内容:')
for each_line in f:
print(each_line)

  这是一个简单的读取文件内容的例子,如果用户输入正确的文件名,文件内容得以显示。如果用户输入一个不存在的文件名,那么代码就会出现异常。如下1.txt并不存在:

  请输入要打开的文件名:1.txt
  Traceback (most recent call last):
  File "D:/python/p9_1.py", line 4, in <module>
  f=open(file_name,'r')
  FileNotFoundError: [Errno 2] No such file or directory: '1.txt'

  上面的例子就抛出了一个FileNotFoundError异常。

  以下是几种常见的异常类型:

  

  1.AssertionError:断言语句失败

  在分支和循环中当assert关键字后面的条件为假时,程序将停止并抛出AssertionError异常,一般在测试阶段用于在代码中置入检查点。

 #AssertionError异常
my_list=['蔡徐坤']
assert len(my_list)>0 #长度是否大于0
print(my_list.pop()) #弹出
assert len(my_list)>0

  Traceback (most recent call last):
  蔡徐坤
  File "D:/python/9_1_2.py", line 6, in <module>
  assert len(my_list)>0
  AssertionError

  2.AttributeError:尝试访问未知的对象属性

 #AttributeError异常
my_list=[]
my_list.wtf 

  Traceback (most recent call last):
  File "D:/python/p9_1_3.py", line 4, in <module>
  my_list.wtf
  AttributeError: 'list' object has no attribute 'wtf'

  3.IndexError:索引超出序列的范围

 #IndexError
my_list=[1,2,3]
my_list[3]

  Traceback (most recent call last):
  File "D:/python/p9_1_3.py", line 8, in <module>
  my_list[3]
  IndexError: list index out of range

  4.KeyError:字典中查找一个不存在的关键字

 #KeyError
my_dict={"one":1,"two":2,"three":3}
print(my_dict["one"])
print(my_dict["four"])

  1
  Traceback (most recent call last):
  File "D:/python/p9_1_3.py", line 13, in <module>
  print(my_dict["four"])
  KeyError: 'four'

  

  5.NameError:尝试访问一个不存在的变量

 #NameError
print(name)

  Traceback (most recent call last):
  File "D:/python/p9_1_3.py", line 16, in <module>
  print(name)
  NameError: name 'name' is not defined

  

  6.OSError:操作系统产生的异常

  如例子FileNotFoundError就是OSError的子类。

  

  7.SynataxError:Python的语法错误

   如下:任何错误的语法都会抛出改异常。 

 #SynataxError
my_dict=asdxc}

  File "D:/python/p9_1_3.py", line 18
  my_dict=asdxc}
  ^
  SyntaxError: invalid syntax

  

  8.TypeError:不同类型间的无效操作

  有些类型不同不能进行相互计算,否则抛出该异常。

 #TypeError
print(1+"")

  Traceback (most recent call last):
  File "D:/python/p9_1_3.py", line 22, in <module>
  print(1+"1")
  TypeError: unsupported operand type(s) for +: 'int' and 'str'

  

  9.ZeroDivisionError:除数为0

 #ZeroDivisionError
print(5/0) 

  Traceback (most recent call last):
  File "D:/python/p9_1_3.py", line 25, in <module>
  print(5/0)
  ZeroDivisionError: division by zero

  

  异常捕获可以使用try语句来实现,任何出现在try语句范围内的异常都会被及时捕获,有两种实现形式try-except和try-finally。

 #try-except
try:
f=open("no.txt")
print(f.read())
f.close()
except OSError:
print("文件打开遇到错误!")

  现在考虑以下这种情况(yes.txt是一个存在的文件):

 try:
f=open("yes.txt")
print(f.read())
sum=1+""
f.close()
except:
print("出现错误!")

  在sum=1+"1"出现异常,导致程序停止运行,而没有执行必要的f.close()操作需要保存文档,因此引入finally的概念,使必要操作最后得以执行。

 try:
f=open("yes.txt")
print(f.read())
sum=1+""
except:
print("出现错误!")
finally:
f.close()

  针对不同异常设置多个except:

  

 try:
sum=1+''
f=open("no.txt")
print(f.read())
f.close()
except OSError as reason:
print("错误原因:"+str(reason))
except TypeError as reason:
print("错误原因:"+str(reason))

  对多个异常统一处理:

 try:
sum=1+''
f=open("no.txt")
print(f.read())
f.close()
except(OSError,TypeError) as reason:
print("错误出现!原因:"+str(reason))

  

  

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

  详细说明请参考:https://docs.python.org/3/library/exceptions.html#base-classes

[python]python的异常处理的更多相关文章

  1. Python 基础之 异常处理

    python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理?  先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...

  2. Python基础---python中的异常处理

    Python中的异常处理 一.什么是异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) ...

  3. [Python Study Notes]异常处理

    正则表达式 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理 断言(Assertions) python标准异常 ...

  4. Python系列之 - 异常处理

    python提供的异常处理 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常 ...

  5. Python异常和异常处理

    Python异常和异常处理2017年12月20日 22:17:08 Megustas_JJC 阅读数:114 标签: python 异常处理 更多 个人分类: Python 版权声明:本文为博主原创文 ...

  6. python中的异常处理机制

    python中的异常处理 1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异 ...

  7. 第五章 python中的异常处理

    每种编程语言都会有自己的异常处理机制,虽然各有特色,但基本上都差不多,那么python中强大异常处理机制是什么样的呢? 一.异常: python用异常对象来表示异常情况,遇到错误后,会引发异常.如果异 ...

  8. Python 入门 之 异常处理

    Python 入门 之 异常处理 1.异常处理 (1)程序中的错误分为两种 <1> 语法错误 (这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范 ...

  9. python面向对象07/异常处理

    python面向对象07/异常处理 目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 ...

随机推荐

  1. c++中strcmp,strcopy函数的使用

    1.strcmp(str1,str2) C/C++函数,比较两个字符串, 设这两个字符串为str1,str2,若str1==str2,则返回零:若str1<str2,则返回负数:若str1> ...

  2. springboot报 org.thymeleaf.exceptions.TemplateInputException: Error resolving template "succeed";

    --------------------- 本文转自 林晓风 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/Lin_xiaofeng/article/details/ ...

  3. vue-cli2.X中引入高德地图,将其设为全局对象

    平时一般未用脚手架构建或用webpack构建的项目只要用script标签引入即可,在vue-cli 2.X构建的项目中,需要用如下方式引入高德地图: 首先在高德地图开放平台中注册开发者账号并获取key ...

  4. Java 线程池 ThreadPoolExecutor 的那些事儿

    线程池基础知识 ThreadPoolExecutor : 一个线程池 Executors : 线程池工厂,通过该类可以取得一个拥有特定功能的线程池 ThreadPoolExecutor类实现了Exec ...

  5. 关于Socket、TCP/IP、HTTP、FTP及网络编程

    来源:陶邦仁 链接:http://blog.jobbole.com/99694/ 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,再者如何进行可靠高效 ...

  6. txt 文件的归并和分割

    1.归并 import os # 1.获取需要整合的文件目录下的 filepath = "G:\\我的python\\尹成\\python基础\\day13\\详细分类\\详细地区" ...

  7. MongoDb 快速翻页方法

    翻阅数据是MongoDB最常见的操作之一.一个典型的场景是需要在你的用户界面中显示你的结果.如果你是批量处理的数据,同样重要的是要让你的分页策略正确,以便你的数据处理可以规模化. 接下来,让我们通过一 ...

  8. 关于C语言\b \t \n及转义序列的理解

    转义序列 说明 \b 后退一格(Backspace) \t 水平制表(Tab=4个空格) \v 垂直制表 \r 回车(Enter) \f 换页 \a 发出鸣响 \n 换行 \" 输出/输入双 ...

  9. Vue源码中compiler部分逻辑梳理(内有彩蛋)

    目录 一. 简述 二. 编译流程 三. 彩蛋环节 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 ...

  10. 【Spring】对持久层技术的整合

    一.持久层技术 二.JdbcTemplate 开发步骤: 1. 导入相关的jar包 2. 配置连接池(数据源) 将参数设置到属性文件中: 3. 创建表 4. 编写实体类 5. Dao层实现 5.1 继 ...