我正在忙于将IronPython移植到Windows Phone 8,并且现在遇到一个问题,即我无法检查Python脚本中的数字是否为空。
例如,如果我尝试:
testnum a = 0.1
if testnum == None:
print "Value is null
然后我遇到了以下错误:
An exception of type 'System.ArgumentNullException' occurred in Microsoft.Dynamic.DLL and wasn't handled before a managed/native boundary
Value cannot be null.
Parameter name: y
我确定这种情况发生的原因是因为在"FEATURE_NUMERICS"中没有启用,因为WP没有System.Numerics.BigInteger和System.Numerics.Complex。在当前的源代码中,似乎这两个都是手动实现的。
我已经将BigInterger实现中所有的"=="操作符更改为支持null,如下面的示例:
public static bool operator ==(BigInteger x, BigInteger y) {
if (object.ReferenceEquals(x, null) || object.ReferenceEquals(y, null))
return false;
return Compare(x, y) == 0;
}
我认识到这是毫无意义的,因为y永远不会成为任何包含空值的数字。原因是(我猜测)IPY解析Python脚本并决定在哪些值上应用操作,当它看到一个数字和一个空值时自动抛出'System.ArgumentNullException'异常,因此甚至不会将其发送到BigInteger。
我的问题现在是我不知道这个异常来自哪里,我猜测是解析器的某个地方。我的想法是当我找到源头时做类似于上面的事情,即简单地返回false。你们中有没有人知道我应该在哪里寻找这个异常的来源?