浏览代码

新版异常打印方案

skyfffire 4 月之前
父节点
当前提交
86eff45d0d
共有 4 个文件被更改,包括 75 次插入22 次删除
  1. 15 10
      as.py
  2. 24 12
      erc20_to_mexc.py
  3. 35 0
      tests/format_exc_test.py
  4. 1 0
      toto.readme

+ 15 - 10
as.py

@@ -274,8 +274,9 @@ def update_core_data_periodically():
 
         except Exception as e:
             # 捕获线程循环中的其他潜在错误
-            logger.error(f"数据更新线程发生未知错误: {e}")
-            traceback.print_exc()
+            exc_traceback = traceback.format_exc()
+            logger.error(f"数据更新线程发生未知错误\n{exc_traceback}")
+            # traceback.print_exc()
         
         # 等待 500ms
         time.sleep(0.5)
@@ -365,8 +366,9 @@ def update_mexc_data_periodically():
 
         except Exception as e:
             # 捕获线程循环中的其他潜在错误
-            logger.error(f"数据更新线程发生未知错误: {e}")
-            traceback.print_exc()
+            exc_traceback = traceback.format_exc()
+            logger.error(f"数据更新线程发生未知错误\n{exc_traceback}")
+            # traceback.print_exc()
         
         # 幣種信息處理的delay
         coin_info_get_delay = coin_info_get_delay + 1
@@ -460,14 +462,16 @@ def update_tx_data_periodically():
                         formated_data = pformat(ok_rst['data'], indent=2) # indent=2 让格式更整齐
                         logger.info(f"獲取成功: \n{formated_data}")
                 except Exception as e:
-                    logger.error(f"tx數據獲取失敗: {e}")
-                    traceback.print_exc()
+                    exc_traceback = traceback.format_exc()
+                    logger.error(f"tx數據獲取失敗\n{exc_traceback}")
+                    # traceback.print_exc()
                 
                 # 每一個之間等待1s
                 time.sleep(1)
         except Exception as e:
-            logger.error(f"pending更新线程发生未知错误: {e}")
-            traceback.print_exc()
+            exc_traceback = traceback.format_exc()
+            logger.error(f"pending更新线程发生未知错误\n{exc_traceback}")
+            # traceback.print_exc()
 
 # --- 餘額平衡綫程 ---
 def balance_available_funds_periodically():
@@ -571,8 +575,9 @@ def balance_available_funds_periodically():
                 # TODO 這是另一個方向,需要從鏈上往交易所劃轉
                 pass
         except Exception as e:
-            logger.error(f"可用資金平衡綫程发生未知错误: {e}")
-            traceback.print_exc()
+            exc_traceback = traceback.format_exc()
+            logger.error(f"可用資金平衡綫程发生未知错误\n{exc_traceback}")
+            # traceback.print_exc()
 
 @app.route('/submit_process', methods=['POST'])
 def handle_submit_process():

+ 24 - 12
erc20_to_mexc.py

@@ -277,12 +277,14 @@ class ArbitrageProcess:
             # final, 設定交易狀態,開始交易
             self._set_state(self.STATE_SELLING_ON_EXCHANGE)
         except Exception as e:
-            msg = f"前置檢查未通過:{e}"
+            exc_traceback = traceback.format_exc()
+            msg = f"前置檢查未通過\n{exc_traceback}"
             logger.error(msg)
+
             add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
             self._set_state(self.STATE_REJECT)
 
-            traceback.print_exc()
+            # traceback.print_exc()
 
     # 以下是每个状态对应的具体执行函数
     def _execute_sell_on_exchange(self):
@@ -324,12 +326,14 @@ class ArbitrageProcess:
 
             self._set_state(self.STATE_WAITING_SELL_CONFIRM)
         except Exception as e:
-            msg = f"交易所现货卖出下单失败:{e}"
+            exc_traceback = traceback.format_exc()
+            msg = f"交易所现货卖出下单失败\n{exc_traceback}"
             logger.error(msg)
+
             add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
             self._set_state(self.STATE_FAILED)
 
-            traceback.print_exc()
+            # traceback.print_exc()
 
     def _wait_sell_confirm(self):
         """
@@ -378,12 +382,14 @@ class ArbitrageProcess:
             add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
             self._set_state(self.STATE_FAILED)
         except Exception as e:
-            msg = f"查询交易所现货卖出订单状态时发生错误:{e}"
+            exc_traceback = traceback.format_exc()
+            msg = f"查询交易所现货卖出订单状态时发生错误\n{exc_traceback}"
             logger.error(msg)
+
             add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
             self._set_state(self.STATE_FAILED)
 
-            traceback.print_exc()
+            # traceback.print_exc()
 
     def _execute_buy_on_chain(self):
         """
@@ -426,12 +432,14 @@ class ArbitrageProcess:
             add_state_flow_entry(self.process_item, self.current_state, msg, "success")
             self._set_state(self.STATE_WAITING_CHAIN_CONFIRM)
         except Exception as e:
-            msg = f"鏈上買入未處理的錯誤:{e}, 交易哈希:{self.chain_tx_hash}"
+            exc_traceback = traceback.format_exc()
+            msg = f"鏈上買入未處理的錯誤, 交易哈希:{self.chain_tx_hash}\n{exc_traceback}"
             logger.error(msg)
+
             add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
             self._set_state(self.STATE_WAITING_CHAIN_CONFIRM)
 
-            traceback.print_exc()
+            # traceback.print_exc()
 
     def _wait_chain_confirm(self):
         """
@@ -596,12 +604,14 @@ class ArbitrageProcess:
                 add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
                 self._set_state(self.STATE_WAITING_EXCHANGE_ROLLBACK)
         except Exception as e:
-            msg = f"查询链上确认状态时发生错误:{e}"
+            exc_traceback = traceback.format_exc()
+            msg = f"查询链上确认状态时发生错误\n{exc_traceback}"
             logger.error(msg)
+
             add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
             self._set_state(self.STATE_WAITING_EXCHANGE_ROLLBACK)
 
-            traceback.print_exc()
+            # traceback.print_exc()
 
     def _wait_exchange_rollback(self):
         """
@@ -697,12 +707,14 @@ class ArbitrageProcess:
 
             self._set_state(self.STATE_FAILED)
         except Exception as e:
-            msg = f"【回滚】交易所回滚交易失败:{e}"
+            exc_traceback = traceback.format_exc()
+            msg = f"【回滚】交易所回滚交易失败\n{exc_traceback}"
             logger.error(msg)
+            
             add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
             self._set_state(self.STATE_FAILED)
 
-            traceback.print_exc()
+            # traceback.print_exc()
 
 # 伪代码示例:如何使用这个类
 if __name__ == "__main__":

+ 35 - 0
tests/format_exc_test.py

@@ -0,0 +1,35 @@
+import logging
+import traceback
+import sys
+
+# 配置你的 logger
+logging.basicConfig(level=logging.ERROR,
+                    format='%(asctime)s - %(levelname)s - %(message)s',
+                    filename='error.log',
+                    filemode='a')
+
+logger = logging.getLogger(__name__)
+
+def func_that_might_fail():
+    # 模拟一个会抛出错误的操作
+    result = 1 / 0
+    return result
+
+try:
+    func_that_might_fail()
+except Exception as e:
+    # 打印异常信息到控制台(可选)
+    # traceback.print_exc()
+
+    # 获取完整的异常 traceback 信息作为字符串
+    # traceback.format_exc() 默认情况下会获取当前活跃的异常信息
+    # 如果在 except 块外部调用,需要传入 exc_info
+    exc_traceback = traceback.format_exc()
+
+    # 或者使用 sys.exc_info() 获取元组,然后传递给 format_exception
+    # exc_type, exc_value, exc_traceback_obj = sys.exc_info()
+    # exc_traceback = "".join(traceback.format_exception(exc_type, exc_value, exc_traceback_obj))
+
+    logger.error("An error occurred: %s\n%s", e, exc_traceback)
+
+print("程序继续执行...")

+ 1 - 0
toto.readme

@@ -42,6 +42,7 @@
 
 2025-06-24
 [-] config重新描述一下,乱七八糟的
+[-] 新版异常打印方案
 [ ] 测试延迟开单
 
 有時間再做