代码之家  ›  专栏  ›  技术社区  ›  Muhammad Alkarouri

NaN根据Python的启动给出错误?

  •  4
  • Muhammad Alkarouri  · 技术社区  · 15 年前

    我在用 Python4Delphi 在Delphi程序中嵌入Python。版本:Python2.6.4、Delphi2009、WindowsXP。

    导入时,Delphi程序与EInvalidOp一起崩溃 json . 我追踪到了线路

    NaN, PosInf, NegInf = float('nan'), float('inf'), float('-inf')
    

    在里面 json.decoder .

    果然,司令部 float('nan') 提出 EInvalidOp nan .

    你知道Python标准启动和嵌入式启动有什么不同吗,后者可能会导致这样的错误?

    2 回复  |  直到 15 年前
        1
  •  5
  •   Jeroen Wiert Pluimers    15 年前

    很可能Python使用不同的 8087 control word (CW)设置比德尔菲。

    试试这种代码:

    var
      OldControlWord: Word;
    begin
      OldControlWord := Get8087CW();
      Set8087CW($133F);
      try
        // perform your Python code here
      finally
        Set8087CW(OldControlWord);      
      end;
    end;
    

    看我的 blog article on the 8087 CW in Delphi
    它需要 JCL T8087Precision 类型(在 Jcl8087 单位)。

    --杰罗恩

        2
  •  1
  •   PyScripter    15 年前

    我使用以下内容: delphi默认值为1332美元。 $1232是处理Python问题9980的值。

    procedure MaskFPUExceptions(ExceptionsMasked : boolean);
    begin
    //  if ExceptionsMasked then
    //    Set8087CW($1332 or $3F)
    //  else
    //    Set8087CW($1332);
      if ExceptionsMasked then
        Set8087CW($1232 or $3F)
      else
        Set8087CW($1232);
    end;