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