#実行環境
- Windwos 10
- Python 3.7.4
- Bottle 0.12.17
- Atom
##要約
現状プログラマーですらない底辺ネットワークエンジニアが、何とかプログラミングを身に着けようとインプレスさんより出版の、いちばんやさしいPythonの教本に従い Bottle のハローワールドを実践したところ、下記エラーが発生しさっそく躓く。
Traceback (most recent call last):
File "pybotweb.py", line 8, in <module>
run(host='localhost', port=8080, debug=True)
File "C:\Users\User\Desktop\python_test\pybotweb\bottle.py", line 3131, in run
server.run(app)
File "C:\Users\User\Desktop\python_test\pybotweb\bottle.py", line 2783, in run
srv = make_server(self.host, self.port, app, server_cls, handler_cls)
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\wsgiref\simple_server.py", line 153, in make_server
server = server_class((host, port), handler_class)
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\socketserver.py", line 452, in __init__
self.server_bind()
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\wsgiref\simple_server.py", line 50, in server_bind
HTTPServer.server_bind(self)
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\http\server.py", line 139, in server_bind
self.server_name = socket.getfqdn(host)
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\socket.py", line 676, in getfqdn
hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x88 in position 0: invalid start byte
##切り分けのような何か
全体的にPythonインストール時のpyファイルと、bottle.pyファイル同士で何か競合して悪さしてるっぽいけど、エラーメッセージの最後の出力的に、socket.py の 676行目が怪しい。
- 以下socket.py一部抜粋
---------------------------------------------------------------------
def getfqdn(name=''):
"""Get fully qualified domain name from name.
An empty argument is interpreted as meaning the local host.
First the hostname returned by gethostbyaddr() is checked, then
possibly existing aliases. In case no FQDN is available, hostname
from gethostname() is returned.
"""
name = name.strip()
if not name or name == '0.0.0.0':
name = gethostname()
try:
hostname, aliases, ipaddrs = gethostbyaddr(name) ←ここが676行目
except error:
pass
else:
aliases.insert(0, hostname)
for name in aliases:
if '.' in name:
break
else:
name = hostname
return name
---------------------------------------------------------------------
メッセージ的には「utf-8じゃないから読めないよ」的なことを言ってるっぽいけど、エディターのAtomで確認する限りエラーメッセージ内で登場するファイルは全てutf-8となっている。
この時点で何が問題なのかまるでわからないお手上げ状態、、、
-
インストールコマンドや実行スクリプト
- python -m venv 環境名
- env\Scripts\activate.bat
- pip install bottle
- ※仮想環境にてbottleインストール
- python index.py
-
index.py の中身
from bottle import route, run
@route('/hello')
def hello():
return 'Hello World'
run(host='localhost', port=8080, debug=True)
色々ググってみたものの、utf-8でない、もしくは仮想環境でpipコマンドを使用してないといった内容しか出てこなく、こちらの通りやってみてもやはり同様のエラーメッセージが出力される、、、
どなたか同じタイミングで同様なエラーに遭遇し、最終的に解決された方はいらっしゃらないでしょうか?
###※追記
その後更に色々調べたところ、自分と全く同じ壁にぶち当たった方がいらっしゃいました!!
Python Bottle で UnicodeDecodeError が発生したときに確認した方がいいことと、回避方法
Neko Taroluさん記載の通り、自分もPCのデバイス名を全角で入力してしまっていたようです、、
デバイス名を半角に直したところ、問題なく"Hello World"を表示させることが出来ました!
自分のように躓く初学者の方の参考になれば幸いです。