- 商品期貨量化交易實戰:以Python為工具
- 胡凱博等編著
- 689字
- 2022-04-29 16:52:06
2.10 Python中的異常處理
在編寫Python策略時,難免會出現錯誤,理想的情況是在策略啟動時,通過Python自檢發現錯誤。但實際上Python并不能主動找出所有的錯誤,有一些錯誤只有在運行過程中才能被發現,所以需要使用恰當的方法將錯誤源及相關信息呈現出來,并且對錯誤進行修正,從而提高策略的健壯性。
2.10.1 語法錯誤
語法錯誤是初學者經常遇到的情況。例如,少寫了括號,關鍵字True的字符'T'需要大寫,等等。不過這種錯誤在Python啟動時,通過對代碼的解析會自動終止程序,并且報出錯誤位置和錯誤原因。示例代碼如下:

輸出結果如下:

在上述代碼中,第1行代碼末尾缺少英文冒號“:”,導致策略語法錯誤,觸發了一個異常事件。當異常發生時,策略會終止運行,并且給出錯誤位置和錯誤原因。
2.10.2 異常錯誤
異常錯誤比較隱蔽,通常在策略運行過程中才能被發現。例如,在進行除法運算時除數為0,將一個值為空值的變量(None)當作字典變量使用,將整型變量和字符串變量相加,使用未定義的變量參與運算,等等。示例代碼如下:

輸出結果如下:

在上述代碼中,代碼語法并沒有錯誤,但觸發了一個異常事件,根據錯誤提示可知錯誤原因:在第2行代碼中,0不能作除數。
2.10.3 異常捕獲
為了檢索隱藏的異常錯誤,或者為了避免異常錯誤的發生,可以使用try…except語句捕獲異常。當執行try語句中的代碼塊時,如果發生異常錯誤,則會被異常檢測捕獲,示例代碼如下。在下面第4行代碼中,捕獲異常錯誤信息Exception,并且使用as關鍵字將其重命名為變量e。

輸出結果如下:

在上述代碼中,在程序運算到10/0時,并沒有使程序停止,而是打印了一條日志,并且最后一條日志Log("hello world")也執行了。異常捕獲不僅可以提示代碼錯誤的原因,還可以防止程序因為異常而終止運行。