首页 > 代码库 > 【python之路32】python异常处理

【python之路32】python异常处理

一、捕获异常

1、try  except

#!usr/bin/env python
# -*- coding:utf-8 -*-
num = input("请输入一个数字:")
try:
    int_num = int(num) + 100
    print(int_num)
except:
    print("您输入的不是数字")

2、捕获具体的错误信息

try except Exception as e

#!usr/bin/env python
# -*- coding:utf-8 -*-
num = input("请输入一个数字:")
try:
    int_num = int(num) + 100
    print(int_num)
except Exception as e:  #Exception类所有异常都能捕获,是所有异常类的基类
    print(e)

3、捕获多个异常

#!usr/bin/env python
# -*- coding:utf-8 -*-
num = input("请输入一个数字:")
try:
    int_num = int(num) + 100
    print(int_num)
except ValueError as e:   #只捕获ValueError类型,捕获到后后面的except代码不再运行
    print("发生ValueError")
except IndexError as e:   #只捕获IndexError类型,捕获到后后面的except代码不再运行
    print("发生IndexError")
except Exception as e:    #捕获所有异常类型
    print("发生Exception")

 4、完整的异常结构

#!usr/bin/env python
# -*- coding:utf-8 -*-
try:
    #要捕获异常的代码语句
    pass
except ValueError as e:
    #如果捕获到ValueError异常则执行本代码块
    print(e)
except Exception as e:
    #如果发生错误ValueError没有捕获到,则执行代码块
    print(e)
else:
    #如果try下的代码块没有异常则执行该代码块
    print("未发生异常")
finally:
    #不管发布发生错误都会执行该代码块
    print("end")

5、可以自己抛出异常信息

#!usr/bin/env python
# -*- coding:utf-8 -*-
input_num = input("请输入一个大于0数字:")
try:
    if int(input_num) <= 0:
        raise Exception("数字不能小于等于0") #创建一个Exception对象
except Exception as e:
    print(e)

上面代码中e为Exception的对象,print(e)为什么能打印出文本呢,其原理是利用__str__(self)特殊方法的:

#!usr/bin/env python
# -*- coding:utf-8 -*-
class Foo:
    def __init__(self,ef):
        self.ef = ef
    def __str__(self):
        return self.ef

exception = Foo(出错了。。。。)
print(exception)  #出错了。。。。,实际调用的是__str__(self)方法

 6、断言

一般用于测试,assert 条件 ,如果条件成立执行,条件不成立直接抛出异常

#!usr/bin/env python
# -*- coding:utf-8 -*-
assert 2 == 2
assert 1 > 2   #因为条件不成立所以会直接抛异常

 

【python之路32】python异常处理