歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python 異常處理

Python 異常處理

日期:2017/3/1 9:48:55   编辑:Linux編程

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

捕獲異常的方式

方法一:捕獲所有的異常

  1. try:
  2. a = b
  3. b = c
  4. except Exception,data:
  5. print Exception,":",data
  6. '''輸出:<type 'exceptions.Exception'> : local variable 'b'
  7. referenced before assignment '

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

  1. try:
  2. a = b
  3. b = c
  4. except:
  5. print traceback.print_exc()
  6. '''輸出: Traceback (most recent call last):
  7. File "test.py", line 20, in main
  8. a = b
  9. UnboundLocalError: local variable 'b

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

  1. try:
  2. a = b
  3. b = c
  4. except:
  5. info = sys.exc_info()
  6. print info
  7. print info[0]
  8. print info[1]
  9. '''輸出:
  10. (<type 'exceptions.UnboundLocalError'>, UnboundLocalError("local
  11. variable 'b' referenced before assignment",),
  12. <traceback object at 0x00D243F0>)
  13. <type 'exceptions.UnboundLocalError'>
  14. local variable 'b' referenced before assignment
  15. '''

獲取函數名和行號


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

  1. #!/usr/bin/python
  2. import sys
  3. def get_cur_info():
  4. """Return the frame object for the caller's stack frame."""
  5. try:
  6. raise Exception
  7. except:
  8. f = sys.exc_info()[2].tb_frame.f_back
  9. return (f.f_code.co_name, f.f_lineno)
  10. def callfunc():
  11. print get_cur_info()
  12. if __name__ == '__main__':
  13. callfunc()

  1. import sys
  2. def get_cur_info():
  3. print sys._getframe().f_code.co_name
  4. print sys._getframe().f_back.f_code.co_name
  5. get_cur_info()

Copyright © Linux教程網 All Rights Reserved