2010-10-14 57 views
4

我正在使用Python4Delphi將Python嵌入到Delphi程序中。版本:Python 2.6.4,Delphi 2009,Windows XP。NaN根據Python啓動給出錯誤?

導入json時,Delphi程序與EInvalidOp崩潰。我把它跟蹤到線

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

果然,命令float('nan')在嵌入Delphi程序中的Python中運行時產生了一個EInvalidOp。當在命令行Python(相同的安裝)中執行時,它僅返回nan

任何想法Python標準啓動和嵌入式啓動之間有什麼區別可能導致這樣的錯誤?

回答

5

這很可能是Python使用與Delphi不同的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爲$ 133F值的更詳細的解釋。
它需要JCLT8087Precision類型(它在Jcl8087單位)。

--jeroen

+1

哇。最後我不得不處理8087個問題,它是TP7。這是正確的答案,並且代碼現在可以順利運行。非常感謝。 – 2010-10-14 21:15:55

1

我使用以下命令: $ 1332的德爾福默認。 $ 1232是處理Python Issue 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; 
相關問題