Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

例外処理 #6

Open
koie opened this issue Mar 25, 2019 · 2 comments
Open

例外処理 #6

koie opened this issue Mar 25, 2019 · 2 comments

Comments

@koie
Copy link

koie commented Mar 25, 2019

gpio_open()...gpio_close()まわりの例外処理はwithをつかえるようにするとすっきりするとおもいます。こんなかんじです: https://ideone.com/pteef7

@nyacom
Copy link
Collaborator

nyacom commented Mar 25, 2019

ご指摘の通り,今の例外処理大変かっこ悪いので(しかもバグを見つけてしまった)。
とりあえずgpioが開く(またはcloseに失敗して)ficwww自体が落ちるというのをとりあえず対応したのが今の状況なんですが,もう少し整理したいところです。
で,with句を使えるようにすればいいんですが,ご存知の通りpyficlib2自体がpython/C APIで書かれているので,gpio_open/close自体がただのメソッドして提供されているのがそもそも構造的に良くないという話しになると思います。
gpioというオブジェクトを作ってしまい,そこにメソッドとしてrb8とかメソッドを用意するほうが
オブジェクト指向的には正しいとは思いますが。。。
実際問題,別のクラスでラップして対応させる方法とあるとは思いますが,
どうするのが一番クールなんですかね。。。

時間がある時に生のpyficlib2を触るクラスとそれ以外という感じで,
もうちょっと例外処理を安全にしたいと思います。
(平日は仕事があるのでぜんぜんficを触ってる時間がないのです。。)

@koie
Copy link
Author

koie commented Mar 25, 2019

現状だとgpio用のオブジェクトをつくっても状態管理もないのでうまみがないような気がします。ficwwwが管理しているmodeやifbitなどをlibfic2にもってくるとよいかもしれません。

ちなみに、RAII用のクラスをつくらなくてもcontextlib.contextmanagerをつかうといけるっぽいですね: https://ideone.com/SYMopU
参考: https://ja.stackoverflow.com/questions/5271/with%E6%96%87%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABi-o%E4%BB%A5%E5%A4%96%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/5277#5277

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants