异常知识点的总结
第一部分:异常及异常处理
思考:
1.什么是异常? python中有哪些异常?===》异常本身是类
print(a)  # NameError: name 'a' is not defined  错误类型 NameError
print(3+'a') # TypeError: unsupported operand type(s) for +: 'int' and 'str'
def f:
print(123) # SyntaxError: invalid syntax 语法错误

以上都是没有按照 python 规定写会报出异常
NameError # class NameError(Exception):
TypeError # class TypeError(Exception):
在控制台出现的异常都继承Exception
2.如何通过程序的报错来找到有问题的代码?
例1:只有出现异常情况才会捕获(即执行except代码块)

try:
    # 可能会出现错误的代码,相应的进行处理
    # print(a)  # 出现异常才会捕获
    # print(1+1)  # 不会出现异常
    print(1+'a')
    # def f:  # 语法错误就不应该发生
    #     print(123)
except: # 捕获会出现的异常,并作出相应处理。如果无异常不会去捕获,出了异常捕获,但是语法错误无法捕获。
    print('服务器错误,稍后请重试!!!')
运行截图:

例2:无异常不会去捕获

例3:抛出异常信息

# 异常的几种情况
try:
    # 可能会出现错误的代码,相应的进行处理
    # print(a)  # 会出现异常才会捕获
    # print(1+1)  # 不会出现异常
    # print(1+'a')
    print(3/0)
    # def f:  # 语法错误就不应该发生
    #     print(123)
except NameError as e: # 制定名字异常
    print('服务器错误,稍后请重试!!!')
    a='123'
    print(e)  # name 'a' is not defined
except TypeError as e: # 制定类型异常
    print('类型错误')
    print(e)
# 可能还有其他错误的,不管什么错误都要捕获
except ZeroDivisionError as e:
    print(e)
    # raise e  # 抛出异常信息 错误在哪个地方 便于我们排查代码错误信息
except Exception:  # 不管什么异常都会捕获,大范围的捕获,这行代码放置在最后(其他制定异常之后)
    print('报错了')
# 如果try下面没有异常情况会会执行以下代码 ,如 print(1+1)
else:
    print('这里是else里面的代码')
# 不管try下面有没有异常都会触发以下代码
finally:
    print('这里是finally')
print(123)
运行截图:

如果抛出异常信息:
except ZeroDivisionError as e:
    print(e)
    raise e  # 抛出异常信息 错误在哪个地方 便于我们排查代码错误信息
运行截图:

例4:如果没有异常情况,会执行else语句代码块
try: print(1+1) # 不会出现异常 except NameError as e: # 制定名字异常 print('服务器错误,稍后请重试!!!') a='123' print(e) # name 'a' is not defined except TypeError as e: # 制定类型异常 print('类型错误') print(e) # 可能还有其他错误的,不管什么错误都要捕获 except ZeroDivisionError as e: print(e) raise e # 抛出异常信息 错误在哪个地方 便于我们排查代码错误信息
print(123eee) # 上面抛出异常信息就不再执行这行代码了 except Exception: # 不管什么异常都会捕获,大范围的捕获,这行代码放置在最后(其他制定异常之后) print('报错了') # 如果try下面没有异常情况会会执行以下代码 ,如 print(1+1) else: print('这里是else里面的代码') # 不管try下面有没有异常都会触发以下代码 finally: print('这里是finally') print(123) # 如果前面有抛出异常信息就不会再执行后面的了
运行截图:


第二部分:断言(assert)
思考:
1. 如何能在代码中强制要求 一个条件满足 ?
2.是否有专门的语法来完成 ?

assert isinstance(5,str)  #  AssertionError
# assert isinstance(5,int)
运行截图:

assert 5==5
assert 5==4 # AssertionError
运行截图:

a=5
# assert isinstance(5,str)  #  AssertionError
# assert isinstance(5,int)
# assert 5==5
# assert 5==4 # AssertionError
assert isinstance(a,str),'a不是str类型(错误的提示)'
print(a)  # 前面有断言的话这行代码不再执行  
运行截图:

第三部分:练习
01:自己构造一个报错的场景,并进行一个报错分析
  (报错的类型,报错的原因,报错的代码,和报错的行)
print(a) # NameError: name 'a' is not defined
02:结合异常处理,确保打开文件后的正常关闭
用open直接打开一个文件,然后write进行写入,假设在写入的
时候可能会报错写段代码确保 报错的情况下依然可以把文件关闭掉。
try:
    f=open('file01.txt','w')
    f.write(123)
    f.close()   # 如果没有异常程序到这里就结束!
    # print(a)
    # print(123)
except Exception as e: # 报错的时候
    print(e) # write() argument must be str, not int
    # f.close()
finally:
    f.close()
    # print(f.read())  # 在这里不可以读取
运行截图:

注意事项(如果try代码块异常程序就不再继续执行下面的代码了)
try:
    print(a)
    print(123)  # 如果上面一行代码出错就不再执行这行代码
except Exception as e:# 捕获异常
    print(e)
    print(456)
运行截图:

                    
                
                
            
        
浙公网安备 33010602011771号