python中的异常

异常:程序在运行的时候,如果python解释器遇到一个错误,会停止程序,并提示一些错误信息,这就是异常。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

捕获异常:可以使用try/except语句。

语法:

try:
    # 尝试执行的代码
    pass
except 错误类型1:
    pass
except 错误类型2:
    pass
.....
except Exception as result(只是一个变量名 可以随便写):
    # 无法预判的未知错误
finally:
    print '无论是否出现错误都会执行的代码'

python标准异常:

ZeroDivisionError除(或取模)零 (所有数据类型)
AssertionError断言语句失败
ValueError传入无效的参数

实例:

try:
    # 不能确定正确执行的代码
    num = int(raw_input('请输入一个整数:'))
except:
    # 错误的处理
    print '请输入正确的整数'

print '*' * 50


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

except Exception as result(一个变量名,可以随便写):
        print '未知错误 %s' % result

实例:

try:
    num = int(raw_input('请输入一个整数:'))
    result = 8 / num
    print result
# except ZeroDivisionError:
#     print '0不能做除数'
except ValueError:
    print '请输入正确的整数'
except Exception as result:
    print '未知错误 %s' % result
finally:
    print '无论是否出现错误都会执行的代码'

print '*' * 50

    问题:异常会一级一级的传递,我们需要在哪里捕获异常?

def demo1():
    return int(raw_input('输入整数:'))
def demo2():
    return demo1()
print demo2()

解决方案:在主程序中捕获异常

def demo1():
    return int(raw_input('输入整数:'))
def demo2():
    return demo1()
try:
    print demo2()
except Exception as result:
    print '未知错误 %s' %result

抛出异常:在开发中,除了代码执行出错,python解释器会抛出异常之外,还可以根据应用程序特有的业务需求主动抛出异常

在开发时,如果满足特定的业务需求时,希望抛出异常,可以:
    1.创建一个Exception的对象
    2.使用raise关键字抛出异常对象

实例:提示用户输入密码,如果长度小于8位,就抛出异常(python解释器无法抛出异常,需要我们自己主动抛出异常)

def input_password():

# 1.提示用户输入密码
    pwd = raw_input('请输入密码:')
# 2.判断密码的长度 >=8,就返回用户输入的密码
    if len(pwd) >= 8:
        return pwd
# 3.如果<8,就主动抛出异常
    print '抛出异常'
    # 1.创建异常对象
    ex = Exception('密码长度不够')
    raise ex

# 注意:只抛出异常而不捕获异常,代码会报错
try:
    print input_password()
except Exception as result:
    print result

断言:可以理解为提前预言,让人更好的知道错误的原因。预言成功,则获取结果,预言失败,则出现一个AssertError异常,异常的描述信息是自定义的

def func(num, div):
    assert (div != 0), 'div不能等于0' #div!=0是预言内容,若预言失败,则抛出自定义异常
    return num / div
print func(10, 0)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值