- ベストアンサー
pythonで設定範囲を超えた場合のエラー処理方法
pythonで設定範囲を超えた場合のエラー処理方法が分かりません。参考になるソースや参考例を御存じの方がいらっしゃいませんか? 具体的には、IPアドレス等(NETMASK,GATEWAY)のmax255.255.255.255の数値が[0-255]までの設定数値ならOKで それ以外であればエラーにするといった処理がPythonで書けなくて困っております。 今回はIPv4のみであるので、4つのいずれか一つでも[0-255]を超えるならばエラー処理をさせたいのです。 お心当たりのある方お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>上記 if m==None: の中にif, else if,で上記教えて頂いた >error条件を記述していこうかと思っておりましたが間違ってますかね? まあ関数ipaddr で例外を投げるかTrue/Falseを返すか どちらがいいかの問題はあるでしょうけど 特に問題ないのではないでしょうか。 補足にある ipaddr を活かすのなら、 def ipaddr(value): ____m=re.match('^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',value) ____if m==None: ________raise ValueError ____else: ________for v in re.split(r'\.', m.group(1)): ____________if int(v) > 255: ________________raise ValueError とか。
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
頑張れば、各要素が255以下のときにだけマッチする正規表現てのも書けなくはありませんが面倒なので re.compile(r'(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})') こういうパターンを作っておいて、 >>> all(int(x) < 256 for x in r.match("127.0.300.144").groups()) False >>> all(int(x) < 256 for x in r.match("127.0.254.144").groups()) True >>> any(int(x) > 255 for x in r.match("127.0.300.144").groups()) True >>> any(int(x) > 255 for x in r.match("127.0.128.144").groups()) False こういう風にチェックするとか。 anyとかallという関数は2.5以降でしか使えないのでその辺はよろしく。
補足
>anyとかallという関数は2.5以降でしか使えないのでその辺はよろしく。 こちらのpythonのVer.を調べましたら、 [ ]python -V Python 2.4.3 でした。他の方法はないでしょうか? あと、Pythonのコーディング方法がよくわかっていないので def ipaddr(value) m=re.match('^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',value) if m==None: raise ValueError 上記 if m==None: の中にif, else if,で上記教えて頂いたerror条件を記述していこうかと思っておりましたが間違ってますかね?
- sakusaker7
- ベストアンサー率62% (800/1280)
もうちょっと具体的な操作を書いてもらえます? たとえば gethostbyaddr に渡す前の引数をチェックしたいとか。
お礼
そうです!引数チェックで使用したいと考えております。 具体的には、定義ファイルを読み込ませると(IPアドレス、ネットマスク、ゲートウェイ等)linuxの/etc/xen/. 渡すように設定しているですが 現段階では、re.match()で[0-9].[0-9].[0-9].[0-9]でのみのエラー処理しか 設定できていないので、さらに255以上の数値を設定された際の条件分岐を行いたいのです。
お礼
ありがとうございます! 実装できました!!