Python 代碼的異常處理和打印異常信息


前言

  • Python的異常處理可以向用戶准確反饋出錯信息,所有異常都是基類Exception的子類。
    自定義異常都是從基類Exception中繼承,Python自動將所有內建的異常放到內建命名空間中
    所以程序不必導入exceptions模塊即可使用異常。
  • 需要查看詳細的錯誤信息需導入import traceback模塊

捕獲異常的方式

方法一:捕獲所有的異常

try:
   1/0
except Exception:
    print (Exception)
"""輸出異常類<class 'Exception'>"""

方法二:采用traceback模塊查看異常,需要導入traceback模塊,這個方法會打印出異常代碼的行號

try:
    1/0
except:
    traceback.print_exc()
"""輸出:
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/demo04.py", line 123, in <module>
    1/0
ZeroDivisionError: division by zero
"""

方法三:采用sys模塊回溯最后的異常

try:
    1/0
except:
    info = sys.exc_info()
    print(info)
    print(info[0])
    print(info[1])

"""輸出
(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero',), <traceback object at 0x000001D3E9FF62C8>)
<class 'ZeroDivisionError'>
division by zero
"""

獲取函數名和行號

上面介紹的方法二回打印出問題代碼的行號,還有一些方法可以獲取函數名和行號

import sys


def get_cur_info():
    """Return the frame object for the caller's stack frame."""
    try:
        raise Exception
    except:
        f = sys.exc_info()[2].tb_frame.f_back
    return (f.f_code.co_name, f.f_lineno)


def callfunc():
    print(get_cur_info())


if __name__ == '__main__':
    callfunc()

"""輸出:
('callfunc', 131)
"""
import sys
def get_cur_info():
    # 獲取當前函數名
    print(sys._getframe().f_code.co_name)
    # 獲取調用函數名(A調用B函數,獲取A的函數名)
    print(sys._getframe().f_back.f_code.co_name)
get_cur_info()

"""輸出:
get_cur_info
<module>
"""


免責聲明!

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



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