NaN выдает ошибку в зависимости от запуска Python?
Я использую Python4Delphi для встраивания Python в программу Delphi. Версии: Python 2.6.4, Delphi 2009, Windows XP.
Программа Delphi аварийно завершает работу с EInvalidOp при импорте json
. Я проследил его до линии
NaN, PosInf, NegInf = float('nan'), float('inf'), float('-inf')
В json.decoder
.
Конечно же, команда float('nan')
вызывает EInvalidOp
при запуске внутри Python, встроенного в программу Delphi. При выполнении в командной строке Python (та же установка) он просто возвращает nan
.
Любая идея, что такое разница между стандартным запуском Python и встроенным, что может привести к такой ошибке?
2 ответа:
Это наиболее вероятно, что Python использует другую настройку 8087 control word (CW), чем Delphi.
Попробуйте такой код:
var OldControlWord: Word; begin OldControlWord := Get8087CW(); Set8087CW($133F); try // perform your Python code here finally Set8087CW(OldControlWord); end; end;
Смотрите мою статью в блогео 8087 CW в Delphi для более подробного объяснения значения $133F.
Ему нужен JCL для типаT8087Precision
(который находится в блокеJcl8087
).-- Йерун
Я использую следующее: $ 1332-это delphi по умолчанию. $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;