商品期货量化交易实战:以Python为工具
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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")也执行了。异常捕获不仅可以提示代码错误的原因,还可以防止程序因为异常而终止运行。