# 異常分為兩種:
# 語法異常。
# name # NameError
# 語法異常。
# name # NameError
# if 3 > 2:
# print(666)
# print(333) # IndentationError
# print(666)
# print(333) # IndentationError
# 邏輯異常。
# int(input('>>>'))
# l1 = [1, 2, 3]
# print(l1[100]) # IndexError
# int(input('>>>'))
# l1 = [1, 2, 3]
# print(l1[100]) # IndexError
# dic = {'name': 'alex'}
# print(dic['age']) # KeyError
# print(666)
# print(dic['age']) # KeyError
# print(666)
# 異常處理:
# 1,if else...... 對於if語句處理異常只能處理簡單的,如果考慮多個條件 不合適。
# try except ...
# try except ...
# 單支情況。 try except
# 嘗試着運行try里面的代碼,出現錯誤,按照錯誤類型去尋找相應的except,找到執行此except代碼,然后程序繼續運轉。
# try:
# print(111)
# print(222)
# print(333)
# name
# l1 = [1, 2, 3]
# print(l1[100])
#
# except NameError:
# print('name is not defined')
# print(666)
# 嘗試着運行try里面的代碼,出現錯誤,按照錯誤類型去尋找相應的except,找到執行此except代碼,然后程序繼續運轉。
# try:
# print(111)
# print(222)
# print(333)
# name
# l1 = [1, 2, 3]
# print(l1[100])
#
# except NameError:
# print('name is not defined')
# print(666)
# 多支情況。try except except except ....
# try:
# print(111)
# print(222)
# print(333)
# name
# l1 = [1, 2, 3]
# print(l1[100])
# dic = {'name': 'alex'}
# print(dic['age'])
#
#
# except NameError:
# print('name is not defined')
#
# except IndexError:
# print('索引超出范圍....')
#
# except KeyError:
# print('沒有此key...')
#
# print(666)
# print(111)
# print(222)
# print(333)
# name
# l1 = [1, 2, 3]
# print(l1[100])
# dic = {'name': 'alex'}
# print(dic['age'])
#
#
# except NameError:
# print('name is not defined')
#
# except IndexError:
# print('索引超出范圍....')
#
# except KeyError:
# print('沒有此key...')
#
# print(666)
# 萬能處理。
# try:
# print(111)
# print(222)
# print(333)
# # name
# l1 = [1, 2, 3]
# # print(l1[100])
# dic = {'name': 'alex'}
# print(dic['age'])
#
# except Exception as e:
# print(e)
# print(666)
# print(111)
# print(222)
# print(333)
# # name
# l1 = [1, 2, 3]
# # print(l1[100])
# dic = {'name': 'alex'}
# print(dic['age'])
#
# except Exception as e:
# print(e)
# print(666)
# 萬能: 如果你對錯誤原因不關心,只是想不讓其報錯,那么程序中你就用萬能處理。
# 如果你對錯誤原因需要進行不同分流或者程序處理,那么就需要多分支。
# 如果你對錯誤原因需要進行不同分流或者程序處理,那么就需要多分支。
# 多分支 加 萬能處理。 : 對某些錯誤需要進行分流處理,剩下的錯誤直接跳過。
# try:
# print(111)
# print(222)
# print(333)
# # name
# int(input(''))
# l1 = [1, 2, 3]
# print(l1[100])
# dic = {'name': 'alex'}
# print(dic['age'])
#
#
# except NameError:
# print('name is not defined')
#
# except IndexError:
# print('索引超出范圍....')
#
# except KeyError:
# print('沒有此key...')
#
# except Exception:
# pass
# print(666)
# print(111)
# print(222)
# print(333)
# # name
# int(input(''))
# l1 = [1, 2, 3]
# print(l1[100])
# dic = {'name': 'alex'}
# print(dic['age'])
#
#
# except NameError:
# print('name is not defined')
#
# except IndexError:
# print('索引超出范圍....')
#
# except KeyError:
# print('沒有此key...')
#
# except Exception:
# pass
# print(666)
# try except else
# 如果出現異常 就不會走else邏輯,不出現異常,則執行else邏輯。
# try:
# print(111)
# print(222)
# name
#
# except NameError:
# print('name is not defined')
#
# else:
# print(333)
# print(666)
# 如果出現異常 就不會走else邏輯,不出現異常,則執行else邏輯。
# try:
# print(111)
# print(222)
# name
#
# except NameError:
# print('name is not defined')
#
# else:
# print(333)
# print(666)
# try:
# print('二狗 向 臉哥轉了 200元')
# name
# print('臉哥確認收到了 200元')
#
# except NameError:
# print('name is not defined')
#
# else:
# print('轉賬成功')
# print(666)
# try except else finally
# finally 無論報不報錯都執行,如果報錯,finally是在報錯之前執行的!!!
# try:
# print('二狗 向 臉哥轉了 200元')
# name
# print('臉哥確認收到了 200元')
#
# except KeyError:
# print('name is not defined')
# #
# # else:
# # print('轉賬成功')
# #
# finally:
# print(666)
# 文件操作:
#
# f1 = open('a.log', encoding='utf-8')
# f1.read()
# '''
# 各種對文件操作的代碼,但是可能會出錯,出錯之后,你的文件句柄無法關閉。
# '''
# f1.close()
# 解決方案:
# try:
# f1 = open('a.log', encoding='gbk')
# f1.read()
# f1.write('sfdsf')
# '''
# 各種對文件操作的代碼,但是可能會出錯,出錯之后,你的文件句柄無法關閉。
# '''
# finally:
# print(666)
# f1.close()
# try:
# f1 = open('a.log', encoding='gbk')
# f1.read()
# f1.write('sfdsf')
# '''
# 各種對文件操作的代碼,但是可能會出錯,出錯之后,你的文件句柄無法關閉。
# '''
# finally:
# print(666)
# f1.close()
# finally 會在retrurn之前先執行。
# def func(a):
# try:
# a += 1
# return a
# finally:
# print(333)
#
# print(func(5))
# 以后如果遇到關閉連接,數據庫連接等等。
# 自定義異常處理。
# raise
# raise 666
# python提供了大部分異常,但是不是所有,比如 大的框架的手機連接問題,網絡引發的代碼問題等等。
# Exception 也處理不了。
#
# EOFError
# NameError
# Exception
# Exception 也處理不了。
#
# EOFError
# NameError
# Exception
# 程序中如果出現了python解決不了的異常 比如 PhoneConnectionError
# class PhoneConnectionError(BaseException):
# pass
# try:
# raise PhoneConnectionError('類型錯誤')
# except PhoneConnectionError:
# print('手機連接出現問題')
# 源碼中經常遇到 條件只要不成立,我就拋出錯誤
# assert 1 == 2
# assert 1 == 2
