1. ホーム

予期しないトークン付近の構文エラー 脚注のエラー解決

2022-02-16 14:46:48

linuxサーバーでpython3ファイルを実行すると、実行時にエラーが報告されることがわかりました:予期しないトークンの近くに構文エラー、慎重に検索してもエラーが見つからなかった、その後、私はスクリプトコンテンツが各行の最後に^M文字を追加したことがわかりました、方法をチェック:vi -bは、スクリプトファイルを開く

Winマシンにスクリプトを保存しようとして、Win下のエディタで編集してしまったのが原因だと思います。


さて、簡単にまとめると以下のようになります。

vim -bコマンドで、次のようにファイルの中身を表示します。


行ごとに^Mが追加されるのでしょうか?

では、この^Mが何なのか、次は何をすればいいのでしょうか?

大昔の大昔の......。  昔のテレタイプライターは、改行するのに2つの文字を使っていました。1文字はスライドを最初の位置に戻し(キャリッジリターン、<CR>、ASCIIコード0Dと呼ぶ)、もう1文字は紙を1行移動(ラインフィード、<LF>、ASCIIコード0Aと呼ぶ)させるものでした。コンピュータが登場した当時は、メモリが非常に高価だった。UNIXの開発者は行末を1文字にし、LinuxもUNIXに倣って<LF>とし、Appleの開発者は<CR>としたのです。MS-DOSやWindowsを開発した人たちは、昔ながらの<CR><LF>にこだわることにしたんだ。

MS-DOSやWindowsでは、キャリッジリターン+ラインフィードで改行を表すため、LinuxのVimでWindowsのVCで書かれたコードを見る場合、行末の "^M" 記号は改行を表します。

基本的な回避策は3つあります。

1. vimエディタに置き換える

vim -b ファイル名

コマンドモードで %s/^M//g を実行し、置換する。

注)上記のコマンドラインの "^M" は "^" + "M" ではなく、 "Ctrl+v ", "Ctrl+M" キーで生成される文字です。

2. dos2unixコマンドで変換する

Dos2unixは、システムのバージョンによってはデフォルトでインストールされています。

Linuxでは、テキストファイルの改行コードに" \n" を使用しますが、Windowsでは改行コードに" \rn"を使用します。そのため、WindowsのテキストファイルをLinuxで使用すると、エラーが発生することがあります。dos2unixは、" \rn" を "\n" に、unix2dosは "\n" を "\rn& quot; に変換するコマンドである。

dos2unix と unix2dos のコマンドは非常にシンプルで、次のような書式で使用します: dos2unix ファイル名

もっと詳しく知りたい方は、マニュアルをご覧ください。 man dos2unix

3. テキスト処理ツールの使用

cat filename | tr -d "/r" > newfile ^M を削除して、新しいファイルを生成します。

同様にsedコマンドなどもあります。置き換え可能なコマンドはすべて新しいファイルを生成するために使用されます。

また、Linuxプラットフォームへのアップロード時に、アップロードの種類をバイナリに選択することで、この問題を回避することができますので、試してみてください。