質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

解決済

TypeError: __init__() missing 3 required positional arguments: 'request', になるのはなぜでしょうか

eisaku123
eisaku123

総合スコア65

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

1回答

0評価

0クリップ

3859閲覧

投稿2020/03/10 13:32

Pyhonのクラスに関することで細かいことになるのですが

server = HTTPServer((host, port), Handler)

正常に動作しますが

hand=Handler() にして
server = HTTPServer((host, port),hand )

に変更すると以下のようなエラー(標記)になってしまいます。

インスタンスにしてから引数にセットするとなぜエラーになるのかわかりませんので
ご教授よろしくお願いいたします。

ソースはさらに下にあります。

(python3-toku) pi@raspberrypi:~/toku1/01-04-a1/package_parts $ python app_server.py __main__ Traceback (most recent call last): File "app_server.py", line 147, in <module> run(app) File "app_server.py", line 85, in run hand=Handler() TypeError: __init__() missing 3 required positional arguments: 'request', 'client_address', and 'server

ソース
※の部分3点を変更

python

#!/usr/bin/env python # -*- coding: utf-8 -*- from http.server import BaseHTTPRequestHandler, HTTPServer import os, time import wiringpi from parts import Led # グローバル変数 _application = None _server = None class Handler(BaseHTTPRequestHandler): """ HTTPリクエストを処理するクラス """ def do_GET(self): """ GETメソッドによるHTTPリクエストを処理する関数 """ global _application if self.path == '/shutdown': self._do_response('shutdown') global _server if _server is not None and _server.socket is not None: _server.socket.close() _server = None return if _application is not None: result, response_body = _application.exec(self.path) if result: self._do_response(response_body) else: result = self._do_file_response(self.path) if not result: # 上記にあてはまらない場合は対応するパスがない self.send_error(404, 'File Not Found: {0}'.format(self.path)) return def _do_response(self, s): """ 省略 """ def _do_file_response(self, url_path): """ 省略""" def run(app=None, host='0.0.0.0', port=8080, cam=None): """ サーバー起動用関数 app: アプリケーション機能拡張用オブジェクト exec()メソッドが必要 host: 待機するIPアドレス port: 待機するポート cam: mjpeg_server用カメラオブジェクト start(), stop(), capture() メソッドが必要 """ global _application global _server _application = app hand=Handler() ※-----ここを追加 server = HTTPServer((host, port),hand )※-------これに変更 エラーになる #server = HTTPServer((host, port), Handler)※---これをこコメントアウト 正常 print(time.asctime(), 'Server start - {0}:{1}'.format(host, port)) try: _server.serve_forever() except ValueError: print('remote shutdown') except KeyboardInterrupt: print('KeyboardInterrupt') finally: if _server is not None and _server.socket is not None: _server.socket.close() print(time.asctime(), 'Server stop - {0}:{1}'.format(host, port)) if __name__ == '__main__': # このファイルがスクリプトとして実行される時だけ処理を実行 print(__name__) #run() # -- 定数宣言 -- # # LEDのGPIO番号 LED_PIN = 4 # HTTPレスポンス用HTMLデータ HTML_TEXT = """ <!doctype html> <html> <head> <meta charset="UTF-8"> <title>toku1/01</title> </head> <body> <p><input type="button" value="点灯" onclick="location.href='/led/1'"></p> <p><input type="button" value="消灯" onclick="location.href='/led/0'"></p> <p><input type="button" value="停止" onclick="location.href='/shutdown'"></p> </body> </html> """ class Led01(Led): """ app_server対応版parts.LEDクラス """ def exec(self, path): """ ルーティング処理を記述 """ if path == '/led/0': self.set_status(0) # LED消灯 elif path == '/led/1': self.set_status(1) # LED点灯 else: return False, '' result_body = self.render_template() return True, result_body def render_template(self): """ レンダリング処理を記述 """ return HTML_TEXT # 自作のLED01を使ったWebアプリの実行 wiringpi.wiringPiSetup() app = Led01(LED_PIN) run(app)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。