python 基础之异常处理

说到异常处理,就得先问一下,什么是异常处理?  先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号。

异常的种类先来看一下:

一、常见的异常

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x

IOError 输入/输出异常;基本上是无法打开文件

ImportError 无法引入模块或包;基本上是路径问题或名称错误

IndentationError 语法错误(的子类) ;代码没有正确对齐

IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

KeyError 试图访问字典里不存在的键

KeyboardInterrupt Ctrl+C被按下

NameError 使用一个还未被赋予对象的变量

SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)

TypeError 传入对象类型与要求的不符合

UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,

导致你以为正在访问它

ValueError 传入一个调用者不期望的值,即使值的类型是正确的

二、不常见的异常

ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError

更多异常

更多的异常

接下来再谈何为异常处理?

python解释器检测到错误,触发异常(也允许程序员自己触发异常)

程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

还有个现实的问题就是,为何要进行异常处理呢? 这个问题问的很有价值,进行异常处理就是为了让程序更加的健壮,防止程序在运行过程中奔溃!!!

那如何进行异常处理呢?if 是否可以进行异常处理呢?是不是异常处理的方式只有 try .......except ...finally 这一种方式呢?

好了,现在就统一说明一下,if 是可以进行异常的处理的,但是if 在进行异常处理的过长中会有许多的问题:

1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。

2.在你的程序中频繁的写与程序本身无关,与异常处理有关的if,就像是在你的代码中到处拉屎。可读性极其的差

3.这是可以解决异常的,只是存在1,2的问题,所以,千万不要妄下定论if不能用来异常处理。

我们再来看一下用 try .....except ...finally 的方式处理异常的基本方法

1. 基本语法:

1 try:

2 被检测的代码块

3 except 异常类型:

4 try中一旦检测到异常,就执行这个位置的逻辑

2.异常处理完整版:

try:
a = input('>>>\n')
int(a)
b = input('>>>\n')
int(b)
except ValueError as e :
print(e)
else:
print('你就是个大傻逼!!!!!')
finally:
print('无论如何我都要执行!!!')

except 的代码块可以写多个,就是呢向if else中的else一样的多分支结构

3.主动触发异常:

try:
raise TypeError('类型错误')
except Exception as e:
print(e)

4. 自定义异常:

class EgonException(BaseException):
def __init__(self,msg):
self.msg=msg
def __str__(self):
return self.msg
try:
raise EgonException('类型错误')
except EgonException as e:
print(e)

简单的总结一下:

什么是异常,异常就是错误引发的结果

什么是处理,由于异常带来的是程序崩溃,处理的目的就是让程序在异常后跳转到其他逻辑去执行,不让程序崩溃。

if本身就可以来处理异常,只不过if的方式,对于不同代码段的同一种异常,需要重复写多分支的if,而这段多分支if与真正的工作无关,写多了你的程序可读性就会及其的差。

try..except的方式,只是python提供给你一种特定的语法结构去做这件事,对于不同代码的同一种异常,python为你定制了一中类型,一个expect就可以捕捉到。

python基础之异常处理

Python3 错误和异常 作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python有两种错误很容易辨认:语法错误和异常. ...

Python基础、异常处理

一.概述 错误与异常概念 异常也是对象, 基于Exception类.内置异常 异常处理.流程 try/except/else  处理python或你触发的异常 try/fianlly   不管有没有异 ...

Python基础_异常处理与跟踪

异常的种类 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError 无法引入模块或 ...

Day8 - Python基础8 异常处理、反射、单例模式

本节内容: 1:异常处理 2:反射 3:单例模式 1.异常处理  1.异常简介 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户 ...

python基础(21):异常处理

1. 异常和错误 1.1 错误 程序中难免出现错误,而错误分成两种 1.1.1 语法错误 语法错误:这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正. #语法错误示范一 if ...

python 基础(七) 异常处理

异常处理 一.需求 当遇到错误的时候 不让程序停止执行 而是越过错误继续执行 二.主体结构 (抓取所有异常) try:   可能出现异常的代码段 except:   出现异常以后的处理   三.处理特 ...

Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

Python基础_文件的的处理及异常处理

今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数  open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...

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

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

随机推荐

scala 学习之:list span 用法

Pack consecutive duplicates of list elements into sublists. If a list contains repeated elements the ...

Rich控件一

Calendar控件 Calendar控件用来在Web页面中显示日历中的可选日期,并显示与特定日期关联的数据. 控件声明代码如下:

jsp页面中的$(param.xxx)

$(param.user)相当于 $(paramValues.favorites[0])相当于< ...

ES6常用特性总览

以前看过一遍es6,今天面试时被问到了一个很简单的es6特性,竟然没回答上来,特来重温一下es6,做个总结性笔记. 一.什么是es6 es6是新版本JavaScript语言的标准,在2015年6月发布 ...

Samba共享目录的多用户权限设置案例

下面根据实际工作中遇到的一个共享目录的多用户权限需求案例来说明下Samba用户权限的设置. 一.需求场景领导:李一(liyi)正式员工(zhengshiyuangong):刘二二(liuerer).于 ...

秒杀怎么样才可以防止超卖?基于mysql的事务和锁实现

hadoop学习笔记(九):MapReduce程序的编写

一.MapReduce主要继承两个父类: Map protected void map(KEY key,VALUE value,Context context) throws IOException, ...

2016-2017 ACM-ICPC&comma; NEERC&comma; Moscow Subregional Contest Problem L&period; Lazy Coordinator

题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229511 时间限制:1s 空间限制:512MB 题目大意: 给定一个n 随后跟着2n行输入 ...

高性能Web服务器Nginx的配置与部署研究(14)平滑升级你的Nginx

1.概述(可以直接跳过看第2部分) Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程. (2)老进程负责处理仍然没有处理完的请求,但不再接受处理 ...