异常:
在程序开发中,如果对某些代码的执行不确定(程序的语法完全正确)
可以增加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.输入的不是数字
2.0不能做被除数
- 捕获能够预测到的异常
在程序开发中,如果对某些代码的执行不确定(程序的语法完全正确)
可以增加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 '程序执行完毕'
当用户输入错误信息不是数字时:
当用户输入0时:
- 捕获未知错误:
在开发的时候,要判断所有可能出现的错误,是有一定难度的
需要面面俱到,如果希望程序无论出现任何错误,都不会因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
- 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 '*********'
让我们来看看他们的效果吧!!
当输入正确的信息时:
当输入错误的信息时:
异常的传递
异常的传递–当函数/方法执行出现异常,会将异常传递给函数/
方法调用的一方
如果传递到主程序,依然没有异常处理,程序才会终止,
可以在主程序中增加异常捕获,而在主函数中调用其他函数,只要出现异常,
都会传递到主函数的异常捕获中,这不需要在代码中,增加大量的异常捕获,
能够保证代码的整洁
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('请输入您的密码: ')
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
当密码长度不够8位时:
当密码长度达到长度要求: