异常:程序在运行的时候,如果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)