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”,因此甚至永远不会将它发送到 BigInterger .

我现在的问题是我不知道这个异常起源于哪里,我假设在解析器的某个地方。我的想法是,当我找到原点时,做一些我在上面所做的事情,我只是返回 false。你们中有人知道我应该在哪里寻找这个异常的起源吗?

4

1 回答 1

0

我设法让它工作,问题确实出在整数模块上,我只是看起来不够宽。

于 2013-06-09T06:00:12.713 回答