一.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("******")