try except 异常处理

在写程序时出现异常或者错误的情况,导致程序的终止。

可以使用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来释放资源,不要忘记在处理异常后做清理工作或者回滚操作

以后再补

猜你喜欢

转载自blog.csdn.net/Ali_start/article/details/84789893