先日、ImageJ用のPython (Jython)プラグインスクリプトの開発を、ImageJのスクリプトエディタ上で行っていたら、突然以下のようなエラーが出てちゃんと動作しません。
java.lang.IllegalArgumentException: Cannot create PyString with non-byte value
今までちゃんと走っていたプログラムを多少手直ししただけですが、どこでエラーが発生したかも明記されません。ネットを探すと、インデントに全角の空白を入れるとこのようなエラーが出ることがある、というようなアドバイスはありましたが、それには該当しません。
四苦八苦して原因を探しましたが、分かりません。
ふと、気が付きました。いつもはローカルコンピュータにスクリプトを読ませて実行していましたが(プラットフォームはWindowです)、今回 sambaで共有を掛けたネットドライブ上に、ソースを置いてそこから実行させていたのです。
まさか、と思って、ソースコードをローカルに移して実行すると... 何の問題もなく実行されました。
ソースコードを、ネットドライブから走らせたのが悪かったのか、それともネットドライブがsambaだったのが悪かったのかは分かりませんが、思わぬことが原因となる、こんなこともあるんだということで報告です。
--------------------
[追記]
その後、Ubuntu上のImageJでも確認しましたが、Linux上だとアウトのようです。ちょっと深刻です。しかし、Fiji.app 以下の Plugins フォルダにファイルを置いて、スクリプトエディタを通さずに動かすと動きます。また、エディタからコードをコピーして、ImageJのスクリプトエディタに貼り付けるとエラーが出ずに動くことが分かりました。ただし、ファイルからスクリプトエディタに読み込むと上記のエラーが出ます。またスクリプトエディタから一旦ファイルに保存し、それを読み込んで走らせようとするとやはり同様なエラーが出ます。
クリップボードから貼り付けるのと、ファイルから読み込むのではどこが違うのかと思いますが、おそらく、ImageJのスクリプトエディタの最近のアップデートに伴うバグの可能性が大です。
なおUTF-8のBOM付/BOMなし問題かと思いましたが違いました。改行コード問題でもないようで、今のところ原因不明です。
--------------------------
[再追記 2022.8]
原因が分かりました。ファイルを置いているフォルダに日本語が含まれているとエラーになります。Windowsは「ドキュメント」と表示されていても、実際のフォルダ名は、"Documents" なので、問題がなかったのですが、Unix ではそのまま日本語で「ドキュメント」や「ダウンロード」だったため、問題が発生していたのでした。
最初に samba サーバ上のファイルがうまく動かなかったのも、フォルダ名に日本語が含まれていたためです。