码迷,mamicode.com
首页 > 编程语言 > 详细

python基础之异常处理

时间:2020-01-26 14:35:48      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:语句   崩溃   不同   增强   open   形式   代码   接受   文件   

一 异常和错误

1.程序中难免出现错误,而错误分成两种
1.语法错误(这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正)

#语法错误示范一
if

#语法错误示范二
def test:
    pass

#语法错误示范三
print(haha

2.逻辑错误

#用户输入不完整(比如输入为空)或者输入非法(输入不是数字)
num=input(">>: ")
int(num)

#无法完成计算
res1 = 1/0
res2 = 1+'str'

2.异常
异常就是程序运行时发生错误的信号,在Python中,错误触发的异常如下
技术图片
3.Python中的异常种类
在python中不同的异常可以用不同的类型(Python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误
技术图片

二 异常处理

什么是异常?
异常就是我们语法上是没有问题,但是运行时就报错的称为异常, 异常发生之后剩余代码将不会继续执行
什么是异常处理
Python解释器检测到错误,触发异常(也允许程序员自己触发异常raise)
程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)
如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理
为什么要进行异常处理?
Python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。
所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性
处理异常的两种方式:

  • 流程控制语句(if)
  • 异常处理 -- "私人订制"

三 Python异常处理的‘私人定制‘

Python:为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理
1 基本语法

try:
     被检测的代码块
except 异常类型:
     try中一旦检测到异常,就执行这个位置的逻辑
```python

读文件示例

f = open("userinfo","r",encoding="utf-8")
while True:
    try:
        print(next(f))
    except StopIteration:
        f.close()
        break
        
 next(f)会触发迭代f,依次next(f)就可以读取文件的一行行的内容,无论文件userinf有多大,同一时刻内存中只有一行内容。当文件句柄f中的内容next完后就会抛出异常StopIteration后才可以执行f.close()
2 异常类处理指定的异常情况

未捕获到异常,程序直接报错

s1 = 'hello'
try:
    int(s1)
except IndexError as e:   # as相当于将报错信息赋值给了e
    print e

正确方法:

s1 = 'hello'
try:
    int(s1)
except ValueError as e:
    print e
   
# 报什么错,用什么错误类型去接受

3 万能异常 - Exception
他可以捕获任意异常,例如:

s1 = 'hello'
try:
    int(s1)
except Exception as e:
    print(e)
```python

你可能会说既然有万能异常,那么我直接用上面的这种形式就好了,其他异常可以忽略
你说的没错,但是应该分两种情况去看
如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理,那么可以那么做

s1 = 'hello'
try:
    int(s1)
except Exception,e:
    """丢弃或者执行其他逻辑"""
    print("编码逻辑")

#如果你统一用Exception,没错,是可以捕捉所有异常,但意味着你在处理所有异常时都使用同一个逻辑去处理(这里说的逻辑即当前expect下面跟的代码块)

4 多分支

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
except Exception as e:
    print(e)

5 异常的其他结构

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)

else:
    print('try内代码块没有异常则执行我')

finally:
    print('无论异常与否,都会执行该模块,通常是进行清理工作')

6 主动触发异常

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

7 自定义异常

class EvaException(BaseException):
    def __init__(self,msg):
        self.msg = msg
    def __str__(self):
        return self.msg

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

8 断言

assert 条件
assert 1 == 1
assert 1 == 2

python基础之异常处理

标签:语句   崩溃   不同   增强   open   形式   代码   接受   文件   

原文地址:https://www.cnblogs.com/zzsy/p/12234132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!