异常:

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

try:
    num = int(raw_input('请输入一个整数: '))
except:
    print '请输入正确的整数'
# 无论输入是否错误,程序都会正常执行
print '*' * 50

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

num = int(raw_input('请输入一个整数:'))
result = 10 / num
print '结果为 %d' %result

# 1.输入的不是数字
# 2.0不能做被除数
print '程序执行完毕'

1.输入的不是数字

python 非 真 python非整数错误_错误类型

2.0不能做被除数

python 非 真 python非整数错误_捕获异常_02

  • 捕获能够预测到的异常
    在程序开发中,如果对某些代码的执行不确定(程序的语法完全正确)
    可以增加try来捕获异常
    try:
    尝试执行的代码
    expect:
    出现错误的处理
try:
    num = int(raw_input('请输入一个整数:'))
    result = 10 / num
    print '结果为 %d' %result
except ZeroDivisionError:
    print '0不能做除数'
except ValueError:
    print '请输入正确的整数'
# 1.输入的不是数字
# 2.0不能做被除数
print '程序执行完毕'

当用户输入错误信息不是数字时:

python 非 真 python非整数错误_捕获异常_03


当用户输入0时:

python 非 真 python非整数错误_错误类型_04

  • 捕获未知错误:
    在开发的时候,要判断所有可能出现的错误,是有一定难度的
    需要面面俱到,如果希望程序无论出现任何错误,都不会因python解释器抛出异常而终止
    可以再增加expect Expection as 输出结果
    print ‘%s ’ %输出结果 # 可以看到错误原因
try:
    num = int(raw_input('请输入一个整数:'))
    result = 10 / num
    print '结果为 %d' %result
# except ZeroDivisionError:
#   print '0不能做除数'
except ValueError:
    print '请输入正确的整数'
# 捕获未知异常
# result:一个变量名,可以随意起名
except Exception as result:
    print '未知错误 %s' %result

有时候我们并不能面面俱到,考虑所有的出错结果,比如上一程序中用户输入的被除数,要求为整数,我们只考虑到不是整数就行,但是却忽略了一点,0虽然为整数,但不能作被除数,当系统识别到用户输入的0时,也会中断程序,因此我们用Exception 来表示未知异常。

try:
    num = int(raw_input('请输入一个整数:'))
    result = 10 / num
    print '结果为 %d' %result
# except ZeroDivisionError:
#   print '0不能做除数'
except ValueError:
    print '请输入正确的整数'
# 捕获未知异常
# result:一个变量名,可以随意起名
except Exception as result:
    print '未知错误 %s' %result

python 非 真 python非整数错误_python 非 真_05

  • try 中也有else finally的使用

try:

尝试执行的代码 
 expect:错误类型1 
 pass 
 expect:错误类型2 
 pass 
 expect:错误类型3 
 pass 
 expect Exception as result 
 pass 
 else: 
 #没有异常才会执行的代码 
 finally: 
 # 无论是否有异常,都会执行的代码 
 pass
try:
    num = int(raw_input('请输入一个整数:'))
    result = 10 / num
    print '结果为 %d' % result
# except ZeroDivisionError:
#   print '0不能做除数'
except ValueError:
    print '请输入正确的整数'
# 捕获未知异常
# result:一个变量名,可以随意起名
except Exception as result:
    print '未知错误 %s' % result
# 只有在程序没有出现异常错误才会执行的代码
else:
    print '尝试成功'
# 无论程序是否程序是否出现异常,都会执行的代码
finally:
    print '*********'

让我们来看看他们的效果吧!!

当输入正确的信息时:

python 非 真 python非整数错误_错误类型_06


当输入错误的信息时:

python 非 真 python非整数错误_python 非 真_07

异常的传递

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

def demo1():
    return int(raw_input('请输入一个整数: '))


def demo2():
    return demo1()
# 利用异常的传递性,在主程序中捕获异常
try:
    print demo2()
except Exception as result:
    print '未知错误 %s' %result

python 非 真 python非整数错误_抛出异常_08


判断用户输入的密码

1. 长度<8 错误

2. >=8 返回输入的密码

def input_passwd():
    # 1.提示用户输入密码
    passwd = raw_input('请输入您的密码: ')
    result = len(passwd)
    # 2.判断密码长度
    if result >= 8:
        return passwd
    # 3.<8时,主动抛出异常
    print '主动抛出异常'
    # 1.创建异常对象(可以添加错误信息)
    ex = Exception('密码长度不够')
    raise ex
# 只抛出异常,不捕获异常,代码会出错

try:
    print input_passwd()
except Exception as result:
    print result

python 非 真 python非整数错误_错误类型_09


当密码长度不够8位时:

python 非 真 python非整数错误_错误类型_10


当密码长度达到长度要求:

python 非 真 python非整数错误_python 非 真_11