NaN根据Python启动给出错误?

NaN根据Python启动给出错误?,python,delphi,embedding,Python,Delphi,Embedding,我正在使用它将Python嵌入到Delphi程序中。版本:Python 2.6.4、Delphi 2009、Windows XP 导入json时,Delphi程序与EInvalidOp崩溃。我一直追踪到那条线 NaN, PosInf, NegInf = float('nan'), float('inf'), float('-inf') 在json.decoder中 果然,命令float('nan')在嵌入Delphi程序的Python中运行时会引发EInvalidOp。在命令行Python(相

我正在使用它将Python嵌入到Delphi程序中。版本:Python 2.6.4、Delphi 2009、Windows XP

导入
json
时,Delphi程序与EInvalidOp崩溃。我一直追踪到那条线

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

果然,命令
float('nan')
在嵌入Delphi程序的Python中运行时会引发
EInvalidOp
。在命令行Python(相同安装)中执行时,它只返回
nan


你知道Python标准启动和嵌入式启动之间有什么区别吗?这可能是因为Python使用了与Delphi不同的(CW)设置

请尝试以下代码:

var
  OldControlWord: Word;
begin
  OldControlWord := Get8087CW();
  Set8087CW($133F);
  try
    // perform your Python code here
  finally
    Set8087CW(OldControlWord);      
  end;
end;
有关$133F价值的更详细说明,请参见my。
对于
t8087精度
类型(在
Jcl8087
单元中),它需要

--杰罗恩

我使用以下方法: 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;

哇!我最后一次处理8087个问题是TP7。这是正确的答案,代码现在可以顺利运行了。非常感谢。