2.7.9 と 2.7.11 の間でネームスペース処理の変更はありましたか?
TL;DR: Stack Overflow で 450 件以上の回答を提供した後。私はスタック オーバーフローのルールを知っており、問題の絞り込み/分離に努めましたが、以下のすべての理由により、公正な MCVE を投稿することは事実上不可能です。
以下に投稿された生体内診断が証明されました. np.ndarray 呼び出しに名前空間の問題はありません.最初の行が numpy ( np ) シンボルにアクセス/使用しようとするまで、行 14644 (元の番号付けでは 14630 )
aDSegFLOAT = np.ndarray( ( 80, 7 ), ...
それまでの動作する numpy 呼び出しが突然例外を発生させる場所:
UnboundLocalError: 割り当て前に参照されたローカル変数 'np'
はじめに:
定量的モデリングの目的で、かなり広範なpython
モジュール コードが、技術的な分析と予測のために運用される分散処理フレームワークで再利用されています。量子モデル (予測に使用されている) は数十 CPU コア時間という驚くべきコストで生成されるという事実により、ステートフル モジュールreload( QuantFX )
-s を可能にするいくつかの追加手段が導入され、これらが保護されるようになりました。量子モデルのすでに精巧なインスタンスですが、モジュール機能をオンザフライで更新、微調整、再テストすることができます。
事実:
import QuantFX
動作を停止しnumpy
、変更されていない呼び出しで例外をスローします:
- モジュール コードは、[QUANT-TOOLS]、[MODEL] セクションだけを更新して、過去 12 か月間使用されました
- コードはマルチパーティ分散処理の Python 2.7 の一部であるため、MCVE を試みてもエコシステムの動作が反映または複製されることはありません。
問題が発生したとき:ホスト用
の最近の Anaconda ( miniconda
4.0.0 / 4.0.5 ) パッケージ マネージャーをロードした後、2.7.11 と呼ばれるモジュールにも再配置され、この更新が他の Anaconda で問題なく実行されるまでの間Python での 2.2.0 (32 ビット) のインストールが動作を停止し、奇妙な外観の例外が発生するVM02/wXP
python
QuantFX.py
2.7.9
機能不全の運用状態を示すもの:週ごとに数十か月間、
非常にうまくいっています。now をimport QuantFX
呼び出すと、例外が発生し、あたかもがまったく編集されていないかのように(221 行を参照) 、何らかのローカル変数であると見なされます。QuantFX.aMiniRESPONDER()
Traceback
numpy
import
...
[aMiniRESPONDER]: messaging & signalling sockets RTO:<infrastructure-setup>
START:
Sun Apr 17 20:19:33 2016 ...
[aMiniRESPONDER]: final attempt to de-block a remote-processing failed at aXmitSOCKET.send()
SIG->: Sun Apr 17 20:19:33 2016 PUB-lished a <_|SIG_EXIT|_> signal to peers, will sleep( 3 ) to allow for reception
ZMQ:
Sun Apr 17 20:19:36 2016 Graceful Exit Done. RET(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "QuantFX.py", line 14630, in aMiniRESPONDER
aDSegFLOAT= np.ndarray( ( 80, 7 ),
UnboundLocalError: local variable 'np' referenced before assignment
numpy
(インタプリタ コマンド ライン プロンプトでまったく同じ関数を手動で呼び出す間、モジュールによって -ed されたもの (以下の 221 行目)はうまく
いきましたnamespace
numpy
import
|>>> QuantFX.np.ndarray( ( 2, 3 ), dtype = QuantFX.np.float32, order = 'F' )
array([[ 1.22325565e+10, -2.81789980e-05, 1.22325565e+10],
[ 1.91215026e+00, -1.81719875e+00, 1.91215026e+00]], dtype=float32)
+0:00:13.282000
22:20:54
|
|>>> QuantFX.np.__version__
'1.10.4'
+0:00:24.438000
22:21:18
|
)。
行 14630 のコンテキストTraceback
と詳細:
221 行目import numpy as np
+ State-Full リロードの概念:
QuantFX
モジュールのコーディングは PEP* などに関して異議を唱える可能性がありますが、シンタックス コンストラクターは、/ を介したコンテキスト フル モードの操作と、最小限の RAM/CPU での高速で安全なコンテキストのない軽量操作の両方を可能にするように決定されましimport
たreload()
。診断または制御 CLI の目的で 1 つのコンポーネント コードのみを選択/コピー/貼り付け (aRemoteKEYBOARD()
または など) してリモート ターミナルを消費しますが、モジュール全体aMiniRESPONDER()
は必要ありません (上記を含む後期インポートのプロビジョニング(行 14426 )そのような-文脈のない手口のために)。import
QuantFX
numpy
QuantFX
求めるもの:
2.7.9 と 2.7.11 の間の変更に関する説明は、観測されたnp.ndarray()
衝突に関連している可能性があり、先週の金曜日に導入されました。
代替モジュール構文コンストラクターのレイアウトの推奨事項も、そのような提案がステートフルネスの両方を維持しreload( QuantFX )
、コンテキストフルとコンテキストレスの両方のコードベースコンポーネントの使用を許可する場合、高い価値があります。
アップデート:
可能性のある外観とは対照的に、この投稿の前に、問題の分離を可能にするために生体内自己診断を追加するための適切なレビューとデバッグ作業が行われました。
""" DEBUG: VM02, after about-a-year working here stable... THROWS EXC. HERE: "UnboundLocalError: local variable 'np' referenced before assignment" ????? .EXC on np.ndarray()
>>> import QuantFX
Is QuantFX_FLAG seen in dir() during <module> import: True
SECTION: ____IDENTIFY____ [TRY].OK
SECTION: ____IDENTIFY____ [FIN]
SECTION: import [TRY].OK
SECTION: import [FIN]
SECTION: FX-MARKET CONTEXTs [TRY].OK
SECTION: FX-MARKET CONTEXTs [FIN]
SECTION: GENERAL TOOLS [TRY].OK
SECTION: GENERAL TOOLS [FIN]
SECTION: DATA INPUTs [TRY].OK
SECTION: DATA INPUTs [FIN]
SECTION: v41 PROCESS [TRY].OK
SECTION: v41 PROCESS [FIN]
SECTION: v41 QUANT TOOLS [TRY].OK
SECTION: v41 QUANT TOOLS [FIN]
QuantFX.py:10966: RuntimeWarning: invalid value encountered in divide
ST2 = np.where( ST2 != 0, ( ST[-LLV.shape[0]:] - LLV ) / ST2, ST2 ) # / ST2 ( == HHV - LLV ) # __main__:4162: RuntimeWarning: invalid value encountered in divide
SECTION: v41 MODEL [TRY].OK
SECTION: v41 MODEL [FIN]
SECTION: v41 PREDICTOR [TRY].OK
SECTION: v41 PREDICTOR [FIN]
SECTION: MetaTrader RESPONDER [TRY].OK
SECTION: MetaTrader RESPONDER [FIN]
SECTION: ____TEMPLATE____ [TRY].OK
SECTION: ____TEMPLATE____ [FIN]
SECTION: ____TEMPLATE____ [TRY].OK
SECTION: ____TEMPLATE____ [FIN]
SECTION: ____TEMPLATE____ [TRY].OK
SECTION: ____TEMPLATE____ [FIN]
+0:00:01.219000
18:20:14
|
|>>> QuantFX.aMiniRESPONDER( aTarget2Bind2_URL = "tcp://10.0.0.62:9999", anInstrumentDictOfPARAMs = QuantFX.anFxCTX[ QuantFX.aCtxID ] )
[aMiniRESPONDER]: runs in it's own full QuantFX context
[aMiniRESPONDER]: imports DONE
[aMiniRESPONDER]: variables DONE
[aMiniRESPONDER]: messaging & signalling sockets RTO:[aZmqCONTEXT] <class 'zmq.sugar.context.Context'> setup with 15.2.0 version
[aMiniRESPONDER]: messaging & signalling sockets [aXmitSOCKET]-pre
[aMiniRESPONDER]: messaging & signalling sockets (aXmitSOCKET)-to be instantiated-via a call to aZmqCONTEXT.socket( zmq.PAIR )
[aMiniRESPONDER]: messaging & signalling sockets [aXmitSOCKET]-post
[aMiniRESPONDER]: messaging & signalling sockets [aXmitSOCKET]-bind()
[aMiniRESPONDER]: messaging & signalling sockets RTO:[aXmitSOCKET]
[aMiniRESPONDER]: messaging & signalling sockets RTO:[aCtrlSOCKET]
[aMiniRESPONDER]: messaging & signalling sockets RTO:[aSIGsSOCKET]
[aMiniRESPONDER]: messaging & signalling sockets RTO:<infrastructure-setup>
START:
Sun Apr 17 20:19:33 2016 ...
[aMiniRESPONDER]: final attempt to de-block a remote-processing failed at aXmitSOCKET.send()
SIG->: Sun Apr 17 20:19:33 2016 PUB-lished a <_|SIG_EXIT|_> signal to peers, will sleep( 3 ) to allow for reception
ZMQ:
Sun Apr 17 20:19:36 2016 Graceful Exit Done. RET(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "QuantFX.py", line 14630, in aMiniRESPONDER
aDSegFLOAT= np.ndarray( ( 80, 7 ),
UnboundLocalError: local variable 'np' referenced before assignment
インビボ numpy-nd.array-symbol-checker
@viraptorからの生体内チェッカーのアイデア提案付き
def debug_check_np_ndarray( aCallerSideInspectFrameINFO ): # DEBUG-CHECK
#ebug_check_np_ndarray( aCallerSideInspectFrameINFO = getframeinfo( currentframe() ) )
#rom inspect import currentframe, getframeinfo # EXTERNAL RESPONSIBILITY TO import + setup aCallerSideInspectFrameINFO .OnCall
#ef np_check(): # DEF:
try: # TRY: np.*
np.ndarray
print 70*" ", "* NP: np.ndarray call [OK], FILE: ", aCallerSideInspectFrameINFO.filename, " LINE: ", aCallerSideInspectFrameINFO.lineno
except: # EXC: found the issue
print 70*" ", "* NP: np.ndarray call [**], FILE: ", aCallerSideInspectFrameINFO.filename, " LINE: ", aCallerSideInspectFrameINFO.lineno
exc_type, exc_value, exc_traceback = sys.exc_info() # prepare a traceback detail
traceback.print_tb( exc_traceback, limit = 5, file = sys.stdout )
raise
else: # ELSE: ok, passed
#rint("* NP check ok") # optionally add current function name via a traceback module
return
起動時に詳細な行ごとの確認が提供され、クラッシュするまでLine 14644
aDSegFLOAT = np.ndarray( ... )
np.ndarray シンボルマスキングはありませんでした:
|>>> QuantFX.aMiniRESPONDER()
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14387
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14391
[aMiniRESPONDER]: runs in it's own full QuantFX context
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14395
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14404
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14410
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14412
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14419
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14423
[aMiniRESPONDER]: runs in a full QuantFX mode, few imports DONE
[aMiniRESPONDER]: imports DONE
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14441
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14443
[aMiniRESPONDER]: variables DONE
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14454
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14527
[aMiniRESPONDER]: messaging & signalling sockets RTO:[aZmqCONTEXT] <class 'zmq.sugar.context.Context'> setup with 15.2.0 version
[aMiniRESPONDER]: messaging & signalling sockets RTO:<infrastructure-setup>
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14626
START:
Tue Apr 19 16:02:12 2016 ...
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14632
* NP: np.ndarray call [OK], FILE: QuantFX.py LINE: 14643
[aMiniRESPONDER].FINALLY: will start attempts to de-block a remote-processing ( after a prior intentional SIG_EXIT or an unhandled EXC )
[aMiniRESPONDER]: final attempt to de-block a remote-processing failed at aXmitSOCKET.send()
[aMiniRESPONDER]: final attempt to propagate a signal to peers failed at aSIGsSOCKET.send()
EXC. ZmqError(ZMQError('No such file or directory')) on aSIGsSOCKET .setsockopt( zmq.LINGER, 0 ) / .close( aSIGsSOCKET )
EXC. ZmqError(ZMQError('No such file or directory')) on aCtrlSOCKET .setsockopt( zmq.LINGER, 0 ) / .close( aCtrlSOCKET )
EXC. ZmqError(ZMQError('No such file or directory')) on aXmitSOCKET .setsockopt( zmq.LINGER, 0 ) / .close( aXmitSOCKET )
ZMQ:
Tue Apr 19 16:02:15 2016 Graceful Exit Done. RET(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "QuantFX.py", line 14644, in aMiniRESPONDER
aDSegFLOAT = np.ndarray( ( 80, 7 ), # # DSegFLOAT[][] ### ToDo.MS: size-independent ( 80+ ) np.*() :::::::::::::::
UnboundLocalError: local variable 'np' referenced before assignment
+0:00:10.734000
16:02:15
|