基于python下的异常捕获

当我们因为一些错误导致程序异常的时候会报错,但这不是我们想看到的报错信息,所以需要捕获异常输出智能化的提示

In [1]: num = int(raw_input("请输入一个整数:"))
请输入一个整数:2

In [2]: num = int(raw_input("请输入一个整数:"))   输入不是整数时会报错
请输入一个整数:a
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-2fb7e70c617f> in <module>()
----> 1 num = int(raw_input("请输入一个整数:"))

ValueError: invalid literal for int() with base 10: 'a'

这里写图片描述
输入异常的捕获:

在程序开发中,如果对某些代码的执行不确定(程序的语法完全正确)
可以增加try来捕获异常
try:
    尝试执行的代码
except:
    出现错误的处理

try:
    num = int(raw_input("请输入一个整数:"))
except:
    print '请输入正确的整数!!'
# 无论输入是否异常,都会正常输出
print '@' * 50

在这里插入图片描述
除数异常的捕捉:

当python解释器抛出异常时,最后一行错误信息的第一个单词就是错误类型

# 1.提示用户输入一个整数
# 2.使用8除以用户输入的整数并且输出错误:
# 1.输入的不是数字
# 2.0不可以作除数
try:
    num = int(raw_input("请输入一个整数:"))
    result = 8 / num
    print result
except ZeroDivisionError:
    print '0不可以做除数!!'
except ValueError:
    print '请输入正确的整数!!'

o作为除数的时候:
在这里插入图片描述
非整数作为除数时:
在这里插入图片描述
捕获未知异常:

捕获未知异常:
在开发的时候,要判断所有可能出现的错误是有一定难度的如果希望程序无论出现任何错误,python解释器都不会抛出异常
而终止可以再增加一个except.

try:
    num = int(raw_input("请输入一个整数:"))
    result = 8 / num
    print result
# 这里的result是一个变量名,符合变量命名规范即可
# 捕获未知异常
except Exception as result:
    print '未知的错误%s:' %result

0作为除数时:
在这里插入图片描述
非整数作为除数时:
在这里插入图片描述
异常的传递:

异常的传递:
当函数/方法执行出现异常,会将异常传递到函数/方法调用的一方。如果传递到主程序,依旧没有异常处理,程序才会终止,
可以在主程序中增加异常捕获,而在主程序中调用其他函数只要出现异常,都传递到主程序的异常捕获中,这就不需要在代
码中增加大量的异常捕获,能够保证代码的整洁

异常的传递:

# 异常的传递,报错在13行在主程序报错
def demo1():
    return int(raw_input("请输入一个整数:"))
print demo1()

在这里插入图片描述
异常的传递的解决:

def demo1():
    return int(raw_input("请输入一个整数:"))
def demo2():
    return demo1()
# 利用异常的传递性,在主程序解决异常
try:
    print demo2()
except Exception as result:
    print '未知异常%s' %result

在这里插入图片描述
小练习:判断密码长度是否够八位:

判断用户输入的密码长度:
1.<8 错误
2.>=8 返回输入的密码

def input_passwd():
    # 1.提示用户输入密码
    passwd = raw_input("请输入你的密码:")
    # 2.判断密码的长度
    if len(passwd) >= 8:
        return passwd
    # 3.<8主动抛出异常
    # 创建异常对象(可以添加错误信息)
    ex = Exception('你的密码长度不足八位')
    raise ex
# 注意只抛出异常而不捕获异常,程序会出错
try:
    print input_passwd()
except Exception as result:
    print result
# 先创建异常对象,再抛出异常,再在主函数中捕获异常

密码长度足够八位:
在这里插入图片描述
密码长度不够八位:
在这里插入图片描述
完整的捕获异常:

完整的捕获异常代码:
try:
    尝试执行的代码
except 错误类型1:
    pass
except 错误类型2:
    pass
# 未知异常
except Exception as result:
    pass
else:
    # 没有异常才会执行的代码
    pass
finally:
    # 无论是否异常都会执行的代码
    pass

try:
    num = int(raw_input("请输入一个整数:"))
    result = 8 / num
    print result
# 这里的result是一个变量名,符合变量命名规范即可
# 捕获未知异常
except Exception as result:
    print '未知的错误%s:' %result
else:
    print '计算成功!!'
finally:
    print '#' * 30

非整数捕获异常:
在这里插入图片描述
整数输出:
在这里插入图片描述
除数为0异常:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值