python异常处理

一.try-except-else语句块

'''
try:
    语句t
except 错误码 as e:
    语句1
except 错误码 as e:
    语句2
...
else:
    语句e

注意:else语句可以没有

作用:用来检测try语句块中的错误,except获取到错误信息并处理

执行逻辑:
1.try语句块出现了错误,且except匹配到,则执行相应的处理代码
2.try语句块出现了错误,且except没有匹配到,则抛给上一层的try
3.没有错误,执行else
'''

常有三种形式

第一种

# 所有可能出现的具体错误都用except接收
try:
    # print(int("aaa"))
    print(3/0)
except ValueError as e:
    print("int 无法将非数字字符串转换为整数")
except ZeroDivisionError as e:
    print("0 不能作为除数")
else:
    print("everything is ok!")

输出结果
0 不能作为除数

第二种

# 使用一个except接收可能出现的错误
try:
    # print(int("aaa"))
    print(3/0)
except:     # 匹配所有的错误,但是无法确定是哪一种
    print("代码有错误")

输出结果
代码有错误

第三种

# 将可能出现的错误都列出来放到except后面的括号里
try:
    print(int("aaa"))
except (NameError, ValueError, ZeroDivisionError):      # 将多种错误放到一个except中匹配
    print("代码有debug")

输出结果
代码有debug

二.try-except-finally语句块

'''
try...except...finally
try:
    语句t
except 错误码 as e:
    语句1
except 错误码 as e:
    语句2
...
finally:
    语句n


作用:无论语句t是否有错误都会执行最后的语句n

可用于关闭一些文件流f.close()
'''
try:
    print(int("aaa"))
except NameError as e:
    print("name error")
except ValueError as e:
    print("value error")
finally:
    print("this coomand must be excute..")

print("***")

输出结果
value error
this coomand must be excute..
***

三.断言assert

# 断言
# 可用于调式代码,看出哪里有问题

def func(a, b):
    assert (b != 0), "b 不能为0"
    return a / b


print(func(12, 0))

输出结果如下
Traceback (most recent call last):
  File "D:/pythonPro/异常处理/断言.py", line 9, in <module>
    print(func(12, 0))
  File "D:/pythonPro/异常处理/断言.py", line 5, in func
    assert (b != 0), "b 不能为0"
AssertionError: b 不能为0

四.猜数字游戏加入异常处理

# 猜数字加入异常处理
import random


random_num = random.randint(1,100)
while True:
    try:
        guess_num = int(input("pls input a number(1~100):"))  
    except ValueError as e:
        print("you must input a number,can not be other chracters.")
        continue
    else:
        pass

    if guess_num > random_num:
        print("too big.")
        continue
    elif guess_num < random_num:
        print("too small.")
        continue
    else:
        print("sucess")
        break
print("******")

 



原文地址:https://www.cnblogs.com/golinux/p/10812237.html