在写程序时出现异常或者错误的情况,导致程序的终止。
可以使用try...except...finally语句块来处理异常
try...except
a=10
b=0
c = a/b
-----------------------------------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
报错后修改
a=10
b=0
try:
c = a/b
print(c)
except:
print ("error")
----------------------
error
另一个例子
my_age = 25
user_input = input("input your guess num:")
if user_input == my_age:
print("bingo!")
elif user_input > my_age:
print("错了")
input your guess num:a
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-005e1875b885> in <module>()
4 if user_input == my_age:
5 print("bingo!")
----> 6 elif user_input > my_age:
7 print("错了")
TypeError: '>' not supported between instances of 'str' and 'in
my_age = 25
user_input = input("input your guess num:")
while True:
try:
user_input = float(user_input)
break
except:
user_input = input("输入错误,只能为数字,请输入:")
if user_input == my_age:
print("bingo!")
else:
print("错了")
input your guess num:a
输入错误,只能为数字,请输入:
try...finally
a=10
b=0
try:
c = a/b
print(c)
finally:
print("always excute")
--------------------------------
always excute
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: division by zero
虽然有异常发生,但在程序终止前,finally中的语句也能正常执行。
try...except...finally
a=10
b=0
try:
c = a/b
print(c)
except:
print ("error")
finally:
print("always excute")
--------------------------------
error
always excute
总结(参考):
- except语句不是必须的,finally语句也不是必须的,但是二者必须要有一个,否则就没有try的意义了。
- except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常,如果异常已经处理就不会再进入后面的except语句。
- except语句可以以元组形式同时指定多个异常。
- except语句后面如果不指定异常类型,则默认捕获所有异常,你可以通过logging或者sys模块获取当前异常
- 如果要捕获异常后要重复抛出,请使用raise,后面不要带任何参数或信息。
- 尽量使用内置的异常处理语句来 替换try/except语句,比如with语句,getattr()方法
- 切记使用finally来释放资源,不要忘记在处理异常后做清理工作或者回滚操作
以后再补