pythonのエラーを見やすくする試み

## 概要
cloudのpythonコードのエラーログが見にくかったので少し見やすくなるかもと思って、一肌脱いでキレイする関数作りました。
そのままのトレースバックでも良かった感が否めないですが一応少しは見やすくなった？ので共有です。


### 表示例
トレースバックのエラー文をコピペするとこんな感じで、重要なエラークラスと関数などを1行づつに分けたデータフレームにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121605/ed9bf9c6-37b2-f247-29f1-758c8a77ccf6.png)

#### コード
```python
import re
import pandas as pd

def show_traceback(tb: str):
  tb = re.sub(r"Traceback.*:\n", "", tb)
  error_msg = [t for t in tb.split("\n") if t][-1]
  error_res_tb = tb.replace(error_msg, "")
  simple_tb = [re.sub(r"^ +", "", t) for t in error_res_tb.split("\n") if t]

  tb_evens = [t for idx, t in enumerate(simple_tb) if idx % 2 == 0]
  tb_odds = [t for idx, t in enumerate(simple_tb) if idx % 2 == 1]

  tb_list = []
  for e, o in zip(tb_evens, tb_odds):
    e_splits = e.split(",")
    tb_list.append({
      "file": e_splits[0].replace("File ", ""),
      "line": e_splits[1].replace(" line ", ""),
      "func": e_splits[2].replace(" in ", ""),
      "syntax": o,
    })
  df = pd.DataFrame(tb_list)
  df.to_csv("./check_traceback/tb.csv", index=False)
  print("-"*20)
  print(error_msg)
  print("-"*20)
  display(df)
```

### 関数呼び出し例
空白とかは何行でも入っても大丈夫ですが、トレースバックの内容をいじるとsplitする所とかでズレてバグるかもしれないですw
```python
tb = """

Traceback (most recent call last):
  File "/code/./main.py", line 99, in accepted
    redirect_url = class_obj(state=state, code=code).main()
  File "/code/./processor/socket_connected_response.py", line 84, in main
    self.save_firebase(token_dict)
  File "/code/./processor/socket_connected_response.py", line 49, in save_firebase
    accounts_ref.set(accounts_fields["elp_id"], merge=True)
  File "/usr/local/lib/python3.8/site-packages/google/cloud/firestore_v1/document.py", line 166, in set
    batch, kwargs = self._prep_set(document_data, merge, retry, timeout)
  File "/usr/local/lib/python3.8/site-packages/google/cloud/firestore_v1/base_document.py", line 217, in _prep_set
    batch.set(self, document_data, merge=merge)
  File "/usr/local/lib/python3.8/site-packages/google/cloud/firestore_v1/base_batch.py", line 107, in set
    write_pbs = _helpers.pbs_for_set_with_merge(
  File "/usr/local/lib/python3.8/site-packages/google/cloud/firestore_v1/_helpers.py", line 858, in pbs_for_set_with_merge
    extractor = DocumentExtractorForMerge(document_data)
  File "/usr/local/lib/python3.8/site-packages/google/cloud/firestore_v1/_helpers.py", line 723, in __init__
    super(DocumentExtractorForMerge, self).__init__(document_data)
  File "/usr/local/lib/python3.8/site-packages/google/cloud/firestore_v1/_helpers.py", line 504, in __init__
    for field_path, value in iterator:
  File "/usr/local/lib/python3.8/site-packages/google/cloud/firestore_v1/_helpers.py", line 442, in extract_fields
    for key, value in sorted(document_data.items()):
AttributeError: 'str' object has no attribute 'items'

""".strip()

show_traceback(tb)
```
同じファイルを上書きするようになっているので、vscodeでjupyter使ってる人は、拡張機能の「Edit csv」を入れるとcsvファイルとして表示して確認することもできます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121605/39504ab1-e3e6-0fb6-9e8d-534f94a6def7.png)

肝心なデータフレームのアウトプットがちょっと見づらくて残念なので見やすいデータフレームのアウトプット方法をご存知の方いらっしゃれば共有していただきたいです^^