2022年6月16日木曜日

デバッガの起動

 デバッガを起動するには、デバッグしたい箇所付近に次の2文を打ち込んでください。

import pdb

pdb.set_trace()

set_traceを実行後の行で停止します。

下の画面では、set_trace行の次の行で黄色(停止)しているのが分かります。

ScheduleNurseⅢのPythonは、本来の目的である制約の作成のほか、解を求めた後の整形処理用(ポスト)の二つがあります。post_mainで記述された部分が、解整形用のスクリプトになります。今回は、Excelシートに所定フォーマットで解を書き込む処理を行っています。


<ステップを抜ける>

ステップボタンをクリックするとステップ動作しますが、停滞する場合もあります。

求解ページの右画面に実行の行情報が出力されていますが、外部ライブラリを実行している場合が殆どだと思います。外部ライブラリでは、コンパイルされたDLLが実行されており、Pythonソースは添付されていません。よって外部ライブラリのステップ動作をエディタ上で見ることは出来ません。

ですので、下のように、行番号部分をクリックしてブレークポイントを設定し、実行ボタンで、ブレークポイントまで実行させて、ライブラリ内部から抜けてください。


<ブレークポイントのオン・オフ>

もう一度クリックするとオフになります。コメント行にブレークポイントを設定することは出来ません。

次の画面では、Excelが起動したところまで実行しました。(Excelがないとエラーが出て終了してしまいます。)


読み込み用のExcelシートがないと次のように、エラーになってしまいます。
をダブルクリックするとソース行に飛びます。ポスト全体(ReadOnly)ではなく、ソース行に飛ぶようにしました。
ExceFormatは、別に作ってプロジェクトと同じフォルダに置きます。
さらに実行させます。
今度は、reがないと言ってきました。reは、正規表現モジュールです。
記述忘れですので追加します。

追加部は、最初に追加します。(post_mainでは動きませんでした。)


さらに、実行します。またエラーが出てしまいました。
調べたところ、Excelでスタッフ名を検索していますが、見つからないとNonTypeを返してくるようでした。




部長(兼任)の括弧が微妙に違っていたようです。(このようなバグは、良く起きます。)また、名前が変更になっていた部分もありました。スケジュールナースⅢのスタッフ名から、Excelにコピーするようにすれば、このようなミスは防げると思います。
Excelは、1個1個COMを呼ぶので、遅いです。動いているかどうか心配になるので、上のように処理中のスタッフ名を記述しました。

このようにして、ようやくExcelに出力することが出来ました。

以上、Excel整形もスケジュールナースⅢ内蔵Pythonで完結することが出来ました。






0 件のコメント:

コメントを投稿