IronPython数字== null吗?

3

我正在忙于将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。你们中有没有人知道我应该在哪里寻找这个异常的来源?
1个回答

0

我成功让它工作了,问题确实出在整数模块上,我只是没有看得够广泛。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接