1. ホーム
  2. python

Python エラーログ (1) Fatal Python error: Py_Initialize: sys 標準ストリームを初期化できない AttributeErro

2022-02-20 22:06:50
<パス

Pythonの致命的なエラーです。Py_Initialize: sys 標準ストリームを初期化できない AttributeError

python3.5+pycharm ,他の環境ではエラーにならないかどうかわかりません。

from datetime import datetime

with open('C:\Users\hhh\Desktop\sample.txt', 'w') as f:
    f.write('Today is ')
    f.write(datetime.now().strftime('%Y-%m-%d'))


with open('C:\Users\hhh\Desktop\sample.txt', 'r') as f:
    s = f.read()
    print('open for read...')
    print(s)

with open('C:\Users\hhh\Desktop\sample.txt', 'rb') as f:
    s = f.read()
    print('open as binary for read...')
    print(s)



**

以下のエラーが発生しました。

**
Pythonの致命的なエラーです。Py_Initialize: sys 標準ストリームを初期化できません。
AttributeError: モジュール 'io' には 'OpenWrapper' という属性がありません。

現在のスレッド 0x00003a68 (最新の呼び出しが最初)。

プロセスエラーのトラブルシューティング1


パッケージ名ioに問題があることが判明、この登録では単純なprint('hello')文でも上記のエラーが報告されるため、パッケージ名をhhh(任意のパッケージ名)に変更しました。

エラー2

登録内容を変更すると、再び以下のエラーが表示されます。
**with open('C:\Usersh⇄Desktop⇄.txt', 'w') as f.:
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \ UXXXXXXX escape**.
デバッグの結果、ファイルのパスが正しい形式でないことがわかりました

C:\Users\hhh\Desktop\sample.txt

上記のパスを次のように変更します。

C:\\Users\hhh\Desktop\sample.txt

正しいコードは以下の通りです。
なぜ、このように変更する必要があるのでしょうか?それは、Pythonの文字列自体も \ でエスケープされているので、特に注意が必要だからです。Pythonのr接頭辞を使うと、エスケープを意識せずに済むのでおすすめです。

from datetime import datetime

with open('C:\\Users\zhaorongrong\Desktop\sample.txt', 'w') as f:
    f.write('Today is ')
    f.write(datetime.now().strftime('%Y-%m-%d'))


with open('C:\\Users\zhaorongrong\Desktop\sample.txt', 'r') as f:
    s = f.read()
    print('open for read...')
    print(s)

with open('C:\\Users\zhaorongrong\Desktop\sample.txt', 'rb') as f:
    s = f.read()
    print('open as binary for read...')
    print(s)




結果を実行する
読むために開く...
本日は2018-04-04
バイナリで開いて読み込む...
b'\xbd\xf1\xcc\xec\xca\xc7 2018-04-04'

プロセスは終了コード 0 で終了

Pythonのr接頭辞を使うと、エスケープを考える必要がありません。

from datetime import datetime

with open(r'C:\Users\zhaorongrong\Desktop\sample.txt', 'w') as f:
    f.write('Today is ')
    f.write(datetime.now().strftime('%Y-%m-%d'))


with open(r'C:\Users\zhaorongrong\Desktop\sample.txt', 'r') as f:
    s = f.read()
    print('open for read...')
    print(s)

with open(r'C:\Users\zhaorongrong\Desktop\sample.txt', 'rb') as f:
    s = f.read()
    print('open as binary for read...')
    print(s)
'C:\Users\hhh\Desktop\sample.txt'

r'C:\Users\hhh\Desktop\sample.txt'

上記のパスを次のように変更します。

r'C:\Users\hhh\Desktop\sample.txt'