異常處理 try except Exception else finally raise 自定義異常


# 異常分為兩種:
# 語法異常。
# name # NameError
# if 3 > 2:
#     print(666)
#    print(333)  # IndentationError
# 邏輯異常。
# int(input('>>>'))
# l1 = [1, 2, 3]
# print(l1[100])  # IndexError
# dic = {'name': 'alex'}
# print(dic['age'])  # KeyError
# print(666)
# 異常處理:
# 1,if else...... 對於if語句處理異常只能處理簡單的,如果考慮多個條件 不合適。
# 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 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)

# 萬能處理。
# 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)
# 萬能: 如果你對錯誤原因不關心,只是想不讓其報錯,那么程序中你就用萬能處理。
# 如果你對錯誤原因需要進行不同分流或者程序處理,那么就需要多分支。

# 多分支 加 萬能處理。 : 對某些錯誤需要進行分流處理,剩下的錯誤直接跳過。
# 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)
# try except else
# 如果出現異常 就不會走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()

# finally 會在retrurn之前先執行。
# def func(a):
#     try:
#         a += 1
#         return a
#     finally:
#         print(333)
#
# print(func(5))
# 以后如果遇到關閉連接,數據庫連接等等。

# 自定義異常處理。

# raise
# raise 666
# python提供了大部分異常,但是不是所有,比如 大的框架的手機連接問題,網絡引發的代碼問題等等。
# Exception 也處理不了。
#
# EOFError
# NameError
# Exception

# 程序中如果出現了python解決不了的異常 比如 PhoneConnectionError
# class PhoneConnectionError(BaseException):
#     pass
# try:
#     raise PhoneConnectionError('類型錯誤')
# except PhoneConnectionError:
#     print('手機連接出現問題')
# 源碼中經常遇到  條件只要不成立,我就拋出錯誤
# assert 1 == 2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM