异常处理:首先了解异常,程序出现逻辑错误或者用户输入不合法都会引发异常,而这些异常并不是致命的所以不会导致程序崩溃死掉。可以利用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. Codeforces 936C

    题意略. 思路: 这个题目没做出来是因为缺少一个整体的构造思路. 正确的构造思路是不断地在s中去构造并且扩大t的后缀,构造好的后缀总是放在前面,然后不断地把它往后挤,最后将s构造成t. 比如: 现在在 ...

  2. jq ajax传递json对象到服务端及contentType的用法

    目录 0.一般情况下,通过键值对的方式将参数传递到服务端 1.ajax 传递复杂json对象到服务端 2.content-Type 对asp.net mvc项目的重要性 0.一般情况下,通过键值对的方 ...

  3. JNI开发流程

    交叉编译 在一个平台上去编译另一个平台上可以执行的本地代码 cpu平台 arm x86 mips 操作系统平台 windows linux mac os 原理 模拟不同平台的特性去编译代码 jni开发 ...

  4. CopyOnWriteArrayList笔记

    CopyOnWriteArrayList笔记 一.前言 Java 5.0 在java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能. ConcurrentHashMap ...

  5. Java多线程之线程的互斥处理

    Java多线程之线程的互斥处理 一.前言 多线程程序中的各个线程都是自由运行的,所以它们有时就会同时操作同一个实例.这在某些情况下会引发问题.例如,从银行账户取款时,余额确认部分的代码应该是像下面这样 ...

  6. 安装hadoop集群--hdfs

    安装hadoop集群--hdfs 大数据软件 链接:https://pan.baidu.com/s/1-3PYLHMgvvONawJq55hstQ 提取码:izqf 准备一台干净的虚拟机-centos ...

  7. Nacos整合Spring Cloud Gateway组件

    一.什么是Spring Cloud Gateway Spring Cloud Gateway是Spring Cloud官方推出的网关框架,网关作为流量入口有着非常大的作用,常见的功能有路由转发.权限校 ...

  8. Python连载35-死锁问题以及解决方式

    一.死锁问题 例子 import threading import time ​ lock_1 = threading.Lock() lock_2 = threading.Lock() ​ def f ...

  9. js 快速排序算法

    Array.prototype.quickSort = function() { var len = this.length; if(len < 2) return this; var left ...

  10. Codeforces Round #483 (Div. 2) B. Minesweeper

    题目地址:http://codeforces.com/contest/984/problem/B 题目大意:扫雷游戏,给你一个n*m的地图,如果有炸弹,旁边的八个位置都会+1,问这幅图是不是正确的. ...