• ベストアンサー

pythonで設定範囲を超えた場合のエラー処理方法

pythonで設定範囲を超えた場合のエラー処理方法が分かりません。参考になるソースや参考例を御存じの方がいらっしゃいませんか? 具体的には、IPアドレス等(NETMASK,GATEWAY)のmax255.255.255.255の数値が[0-255]までの設定数値ならOKで それ以外であればエラーにするといった処理がPythonで書けなくて困っております。 今回はIPv4のみであるので、4つのいずれか一つでも[0-255]を超えるならばエラー処理をさせたいのです。 お心当たりのある方お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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 とか。

vis3sock
質問者

お礼

ありがとうございます! 実装できました!!

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

頑張れば、各要素が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以降でしか使えないのでその辺はよろしく。

vis3sock
質問者

補足

>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)
回答No.1

もうちょっと具体的な操作を書いてもらえます? たとえば gethostbyaddr に渡す前の引数をチェックしたいとか。

vis3sock
質問者

お礼

そうです!引数チェックで使用したいと考えております。 具体的には、定義ファイルを読み込ませると(IPアドレス、ネットマスク、ゲートウェイ等)linuxの/etc/xen/. 渡すように設定しているですが 現段階では、re.match()で[0-9].[0-9].[0-9].[0-9]でのみのエラー処理しか 設定できていないので、さらに255以上の数値を設定された際の条件分岐を行いたいのです。

関連するQ&A

  • PythonとRの習得の方法について

    PythonとRは似ているように見えます。特に、マトリックスとかベクトルの掛け算をまるで数値の掛け算のように処理しようとしているところがあり、それ以外の言語を学んだものから見ると本当に大丈夫かなと思う面があります。初等的な数学が示すようにマトリックスは掛け算ができない場合があるからです。一方で2つの数値の掛け算の処理は例外が全くないと言っていいと思います。PythonやRで計算がおかしいとか、エラーが出るとき、マトリックスやベクトルの積でミスをしているということがあるかもしれないという不確実さから逃れられないように思うのですが。深層学習の本などではマトリックス計算が数多く出てくるので本当に大丈夫なのかなと思うのですが、どのように確実性の担保を取るのでしょうか。それがないと足元が揺らぐような気がするのですが。CやFortranは本当に電卓をたたいているような雰囲気で処理しているので確かな感じがするのですが、それとかなり違った印象なのですが。

  • pythonで作成する読み込みファイル内の設定項目変更

    (1)IPアドレスが複数書いてある設定ファイルを読み込ませた際に、規定のファイル名に書き換える。  (2)規定ファイル名に書き換えたファイルの特定の部位(例えば5-10行目だけ)をIPアドレスの設定数分ループさせる処理。 pythonでの書き方が分からなくて 御存じの方がいらっしゃったら教えてください。 よろしくお願いいたします。

  • FreeBSDのネットワーク接続

    今FreeBSD6.1を使ってますが(超初心者)、インターネット接続ができなくて困っています。DHCPによる接続を試みていますが、/sysinstallでDHCPどんな情報を入力(host,domain,IPv4gateway,NameServer,IPv4adress,Netmask等)すればよいのかわかりません。ODNを使っているのですが、よくわかりません。BSDのftpを使ってダウンロードしたいのですが・・・。 だれか、知っておられる方、ご教授おねがいします。

  • IPアドレスでアクセス制限(携帯サイト)

    UAだと偽装されてしまうので、IPで制限したいのです。 .htaccessやNet_IPv4は使わず、自作のスクリプトで制限したいと思います。 http://www.ezinfo.jp/php/divide ↑このサイトを参考にしてるのですがいまいちわかりません。 厳密に言えばサブネットマスクを使って範囲を特定する処理がわかりません。 他のソースは理解できるのですが・・・ どなたか詳しく説明してもらえませんか?

    • 締切済み
    • PHP
  • ネットワークの設定について質問です。

    ネットワークの設定について質問です。 (※参考で示しているドメインやIPはダミーです。) OSはCentOS5.5です。 今回ドメインに対するIPの関連付けにおいて対象IPが変わります。 例:hogehoge.com→202.210.20.100 から 58.104.160.198 に変わります。 そのときにDNSの変更をするのですが、 変更した直後は hogehoge.com→202.210.20.100の場合と、hogehoge.com→58.104.160.198の場合 が存在することになります。 これは変更したドメイン情報がネットワーク上に完全に浸透していないためなのですが、 浸透が終わるまでどちらのIPからでもサイトにつながるようにしたいです。 そこでサーバーにNIC(LANの差込口)が2つありますので それぞれのNICにグローバルアドレスを設定すれば良いと思っているのですが、 現在片方しかつながらず困っています。 こういった状況のときのサーバーの設定方法を教えて頂たいです。 /etc/network の設定 NETWORKING=yes NETWORKING_IPV6=yes HOSTNAME=www DOMAINNAME=hogehoge.com /etc/sysconfig/network-scripts/ifcfg-eth0 の設定 DEVICE=eth0 BOOTPROTO=static BROADCAST=202.210.20.127 HWADDR=00:01:02:03:04:01 IPADDR=202.210.20.100 IPV6INIT=yes IPV6_AUTOCONF=yes NETMASK=255.255.255.224 NETWORK=202.210.20.96 GATEWAY=202.210.20.126 ONBOOT=yes /etc/sysconfig/network-scripts/ifcfg-eth1 の設定 DEVICE=eth1 BOOTPROTO=static BROADCAST=58.104.160.223 HWADDR=00:01:02:03:04:02 IPADDR=58.104.160.198 IPV6INIT=yes IPV6_AUTOCONF=yes NETMASK=255.255.255.224 NETWORK=58.104.160.192 GATEWAY=58.104.160.222 ONBOOT=yes /etc/hosts の設定 202.210.20.100 www.hogehoge.com www 58.104.160.198 www.hogehoge.com www /etc/hosts の設定 search hogehoge.com nameserver 212.178.214.28 nameserver 212.178.214.29 ※IPV4でサーバー活用しており、設定にIPV6の使用をYESにしていますが、 特にIPV6は使用していません。サーバー構築時にデフォルトで設定されていたものなので そのままにしている状態です。 networkにGATEWAYの設定をすると、指定した方のネットワークのみに有効になってしまうので、 ifcfg-eth0やifcfg-eth1にそれぞれのゲートウェイを設定させてている状態です。 routeコマンドを実行すると Destination Gateway Genmask Flags Metric Ref Use Iface 202.210.20.96 * 255.255.255.224 U 0 0 0 eth0 58.104.160.192 * 255.255.255.224 U 0 0 0 eth1 169.254.0.0 * 255.255.0.0 U 0 0 0 eth1 default 58.104.160.222 0.0.0.0 UG 0 0 0 eth1 になっている状態です。 この設定以外は特に他のファイルを設定してません。 わかる方がいましたらご教授のほどよろしくお願いします。

  • C#で通信処理。応答がない場合、すぐエラーにしたい

    VS2005、C#で通信処理をしています。 やりたいことは「接続後、データを渡してその返答データをもらう」です。 //サーバーに接続 Int32 port = 9999; TcpClient client = new TcpClient(server, port); //サーバーにメッセージを送信 Byte[] dataA = System.Text.Encoding.UTF8.GetBytes(message); Byte[] dataB = Byte[128]; NetworkStream stream = client.GetStream(); stream.Write(dataA, 0, dataA.Length); len = stream.Read(dataB, 0, dataB.Length) client.Close(); ネットのサンプルを参考にさせてもらい、上のようなソースを作ることができたのですが、2つの疑問があります。 (1)接続時に指定したIPアドレスが存在しない場合、エラーが返ってくるのが遅いです。そういうものなのでしょうか。たとえば、即時返答などはできないのでしょうか。 (2)接続してデータを送っても、向こうからデータが返ってこなければずっと待機したままです。たとえばミリセカンドで切ることはできないのでしょうか。 もしくは指定のミリセカンド経過後強制的にエラー処理に飛ばす等はできないのでしょうか。 通信処理をやるのが初めてで定石がよくわからず、あれこれ試している状態です。 処理についてご存じの方、ご指南いただけたらと思います。参考になるサイトや検索キーワードだけでも教えていただけたら嬉しいです。 よろしくお願いします。

  • FreeBSDネットワーク接続

    UNIX初心者の暴挙におつきあい下さい。 FreeBSD5.4をインストールしました。その後、php.mysql.apacheをインストールして、phpファイルを作成しました。外部から作成したphpファイルを見る事が出来ませんでした。 色々なサイトを参考にして設定を行いましたがどうやっても見る事が出来ません。どこを設定すると、出来るようになるのでしょうか?良いサイトがあれば教えてください。また必要な情報があればご指摘下さい。 よろしくお願いいたします。 ■仮定するネットワーク環境■ ホスト名 foo.hogehoge.ac.jp ホストマシンの IP アドレス 123.45.67.0 ネットマスク(netmask) 255.255.255.0 デフォルトルータ(gateway) の IP アドレス 123.45.67.254 ■構造■ モデム → ルータ(yahooBB.Trio3-6)→PC1・PC2(freeBSD5.4) IP 固定IPではありません ■設定 freeBSD■ rc.conf ifconfig_l0=\"inet 123.45.67.0 netmask 255.255.255.0\" ifconfig_r0=\"inet 123.45.67.0 netmask 255.255.255.0\" defaultrouter=\"123.45.67.254 \" ■設定 yahooBB.Trio3-6■ NAT設定 有効 UPnP設定  有効

  • VBAのエラー処理について

    EXCEL VBAのエラー処理で On Error GoToを使いましたが、 あるPCでは正常にエラー処理を行うのに、違うPCでは、 実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていませんというエラーが起き、エラー処理行に行きません。 理由が分かる方、回答をお願いします。

  • エクセル(2007)の並び替え(範囲設定の不具合)について質問です。

    エクセル(2007)の並び替え(範囲設定の不具合)について質問です。 A、B、2つの列があり、Aに氏名、Bに数値、が入力されています。 その数値が大きい順(降順)に並び替える為、B列(数値)の先頭で降順(Z→A)を押すと、先頭と2番目の位置は変わらず、以下3番目から降順になってしまいます。 Ctrl+Zでやり直すと、範囲が表示されるのですが、確かに先頭で降順したはずなのに、範囲が3番目からになっています。 降順が出来ていないと言う訳ではなく、範囲設定が上手くできない感じでしょうか(手動で範囲設定しても3番目から範囲設定されてしまいます)。 以前はなんの不都合もなく出来ていたのですが、急にこのような症状になってしまいました(何かしたんでしょうけど・・・)。 どなたか解る方ご教授よろしくお願いします。 ※長文解りにくくすみません。

  • IPが表示されない理由について

    WinXP HE を使っています。 ネットワークの設定で固定IP、 ゲートウェイ等を設定しています。 ネットワークプリンターや サーバーへの接続など問題 ありませんが、コマンドプロンプト で ipconfig で設定内容を確認すると、 IP,NETMASK,GATEWAY などが全て表示されず Media State.......Not Configured と表示されてしまいます。 どういった原因が考えれるでしょうか? また、対策は?

専門家に質問してみよう