2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python 3.7.4 で Bottle 0.12.17 のハローワールドが出来ない

Last updated at Posted at 2019-09-10

#実行環境

  • Windwos 10
  • Python 3.7.4
  • Bottle 0.12.17
  • Atom

##要約
現状プログラマーですらない底辺ネットワークエンジニアが、何とかプログラミングを身に着けようとインプレスさんより出版の、いちばんやさしいPythonの教本に従い Bottle のハローワールドを実践したところ、下記エラーが発生しさっそく躓く。

error.message

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一部抜粋
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 の中身

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"を表示させることが出来ました!

自分のように躓く初学者の方の参考になれば幸いです。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?