Pythonが異常スタック情報を捕捉するいくつかの方法(結び目)


プログラムが間違っている時は、異常情報に基づいて、具体的なエラーコードを見つけます。簡単にprintで異常情報を印刷すると、エラーコードをよく追跡できません。

# -*- coding: utf-8 -*-
 
 
def foo(a, b):
  c = a + b
  raise ValueError('test')
  return c
 
 
def bar(a):
  print('a + 100:', foo(a, 100))
 
 
def main():
  try:
    bar(100)
  except Exception as e:
    print(repr(e))
 
if __name__ == '__main__':
  main()
出力:
ValueError('test')
印刷の異常情報が詳細ではないので、エラーの追跡にはあまり役に立ちません。この時は異常スタックの情報が役に立ちます。以下では、異常スタック情報の印刷方法を簡単に紹介します。
1.最も簡単な方法の一つは、loging.exceptionを使うことです。

# -*- coding: utf-8 -*-
import logging
 
 
def foo(a, b):
  c = a + b
  raise ValueError('test')
  return c
 
 
def bar(a):
  print('a + 100:', foo(a, 100))
 
 
def main():
  try:
    bar(100)
  except Exception as e:
    logging.exception(e)
 
if __name__ == '__main__':
  main()
出力:
ERROR:root:test
Traceback(most recent call last):
  File"E:/git_work/scrapy_ppt/test.py"line 16,in main
    bar(100)
  File"E:/git_work/scrapy_ppt/test.py"line 11,in bar
    print('a+100:',foo(a,100)
  File"E:/git_work/scrapy_ppt/test.py"line 6,in foo
    ライセValueError('test')
ValueError:test
異常スタックの情報から私達は力を使わずにエラーコードを探し出すことができます。
2.その他の方法:

# -*- coding: utf-8 -*-
import traceback
import sys
 
 
def foo(a, b):
  c = a + b
  raise ValueError('test')
  return c
 
 
def bar(a):
  print('a + 100:', foo(a, 100))
 
 
def main():
  try:
    bar(100)
  except Exception as e:
    #    
    traceback.print_exc()
 
    #    
    msg = traceback.format_exc()
    print(msg)
 
    et, ev, tb = sys.exc_info()
    #    
    traceback.print_tb(tb)
 
    #    
    traceback.print_exception(et, ev, tb)
 
    #    
    msg = traceback.format_exception(et, ev, tb)
    for m in msg:
      print(m)
 
if __name__ == '__main__':
  main()
ここでPythonが異常スタックの情報をキャッチするいくつかの方法(結び目)についての記事を紹介します。Pythonに関する異常スタックの情報内容については、以前の記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。