• 締切済み

python: 例外classの書き方

pythonで独自の例外classの書き方をチュートリアルで見ていて気づいたことがあります 次のような記載をみつけました class wexal(Exception):  pass 質問の都合上次のように書き換えます class abcde(Exception): 質問: 1)独自の例外クラスの書き方は、(Exception)と記載すれば、abcdeのように名称はなんでも指定できると考えてよいでしょうか 2) Guido van Rossum さん著書のチュートリアル本(ISBN-13 ‏ : ‎ 978-4873119359)をみていると、class の記載の後の名称の最初の文字は大文字になっているものが多くあります  上記で abcdeの部分は、Abcdeでなくても作法上問題ないのでしょうか。つまり(Exception)を記述するときは、最初の文字を大文字にする必要は作法上はないのでしょうか 他の例外の処理については、今回は求めていません。独自例外classの書き方についてのみ質問しています。 【回答上のご注意】 回答は、解答(答え)を求めています わたしはプログラマーではないので、昭和的な「自分で考えろ」的なものは求めていません わからなければ答えない自由もあなたにはあります 不明点があれば説明いたします

  • ketae
  • お礼率85% (292/340)
  • Python
  • 回答数3
  • ありがとう数2

みんなの回答

  • t_ohta
  • ベストアンサー率38% (5072/13251)
回答No.3

> 引数のところ(Exception)と記載すれば、独自例外を書けるという認識でよいのかがちょっとまだひっかかっています オリジナルの例外クラスを作る場合は引数が (Exception) で合ってます。

  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.2

PythonのコーディングスタイルのガイドラインはPEP 8で決まっています。クラス名、変数名などの命名方法はその一部です。 https://peps.python.org/pep-0008/#naming-conventions 例外クラス名に限らず、クラス名にはCapWords形式(アッパーキャメルケースとかパスカルケースとも言う)を使うことが推奨されています。つまり、クラス名の先頭1文字目は大文字にするのが普通です。 これはクラス名・関数名・変数名・定数名などを見分けやすくするための規約であって、Pythonの文法としては全部小文字とか全部大文字のクラス名を禁じているわけではありません。abcdeというクラス名を使ってもプログラムは動作します。

ketae
質問者

お礼

ありがとうございます 名付けはやはりキャメルで書くとよさそうですね pyhthonの模擬試験問題にでてきたので、Exceptionの書き方があるのかと思いました

  • t_ohta
  • ベストアンサー率38% (5072/13251)
回答No.1

1) クラス名は自由に付けても構いませんが予約語は使えません。 http://www.ic.daito.ac.jp/~mizutani/python/intro8_python.html 2) Pythonの標準ライブラリのコーディング規約では、クラス名はパスカルケースで表記することになっています。 「HogeClass」の様に単語を連続して書き、各単語の最初の文字は大文字で他は小文字で書くのがパスカルケースと呼ばれる書き方です。 多くの場合、この標準ライブラリのコーディング規約に合わせて書きますが、Python自体の言語仕様として強制しているわけではないので好きなように書いても問題ありません。

ketae
質問者

お礼

ありがとうございます 予約後はたしかに使えませんね 引数のところ(Exception)と記載すれば、独自例外を書けるという認識でよいのかがちょっとまだひっかかっています

関連するQ&A

  • pythonがわからない。

    pythonに詳しい人に質問。次の構文のどこがおかしいですか。おかしい個所と、おかしい内容を教えてください。 追記 最初はハイフンの入っているフォルダに入れていたんですけれども、pythonはハイフンはそのままでは認識してくれないので、ハイフンのないフォルダを新たに作ってそこに入れました。またフォルダ名とちゃんと符合させているはず

  • pythonのファイルの作り方

    やっ質問と、pythonをインストールできました。 次にpythonのファイルをつくろうとしています。 Webで以下の様な資料を見つけました。 資料:たとえば、「c:\work\ai」のようなフォルダを作成します。 とあるのですが 質問:フォルダは、デスクトップ上に「新規作成」で作ればいいのですか。 資料:つぎに、作成したフォルダにプログラムを記載するためのファイルを作成します。 とあるのですが 質問:このファイルの作り方がわかりません。 pythonの画面上で、コードを作成するのですか。 作り方を、教えてください。 宜しくお願いいたします。  

  • 多重ループから例外で抜け出すやり方について

    PHP5.2.4を使用しています。 次のような複数の箇所で多重ループから抜け出すきっかけになる処理(function1()、function2())を散らばせて 記述している場合、自分としてはメソッドから返ってきたフラグを判定してbreak 2;とかするよりは 例外(throw)を使って抜け出す方法がいいのかなぁと思ってるのですが、 そもそも例外というものはこういう風に使ってもいいのでしょうか? それともこのケース($valueが0以下になったら)では別のやり方の方があるのでしょうか? class Class1 { private $value = 100; public function subValue($value) { $this->value -= $value; if ($this->value <= 0) { throw new Exception('valueが0以下になった'); } } public function function1() { $this->subValue(30); } public function function2() { $this->subValue(50); } public function main() { try { for ($i = 0; $i < 3; $i++) { $this->function1(); for ($j = 0; $j < 3; $j++) { $this->function2(); } } } catch (Exception $e) { print $e->getMessage()." [".__FILE__ ."(".__LINE__.")]<br>\n"; } } } $obj = new Class1(); $obj->main();

    • ベストアンサー
    • PHP
  • 例外処理がまったくわかりません!!

    下のプログラミングについていくつか質問があります。 (1)etest()メソッドってなんですか? (2)存在しないファイルを開くってどういうことですか? (3)FileReader( )対応catch節、Close( )対応catch節ってなんですか? (4)あと、プログラミングあとの本の解説の部分がよくわかりません。抜粋してみます。 「一般的な例外クラスはxxxExceptionというクラス名をしています。このタイプの例外クラスはみな「Exception例外クラス」をスーパークラスにしています。この場合、「catch(Exception e)」を使うとすべてのxxxException例外を補足できるという仕様になっています。ですから下のetest( )メソッドは次のように、ひとつのcatch節で記述することができます。このようにしても表示される4エラーメッセージ(eで指示)は、正しく発生例外(FileNotFoundExceptionまたはIOException) 対応のものになります。」 public static void etest( ) { try { // try節を書く FileReader fr = new FileReader("xfile.txt"); } catch (FileNotFoundException e) { // FileReader( )対応catch節 System.out.println("例外1: " + e); // 例外情報を表示 return; // 戻る } catch (IOException e) { // Close( )対応catch節 System.out.println("例外2: " + e); // 例外情報を表示 return; // 戻る } System.out.println("ファイルは正しくオープンされました"); } } よろしくお願いします。

    • ベストアンサー
    • Java
  • pythonの編集仕様のいろいろ

    pythonのプログラミングを少し始めているのですが、以下のような問題に直面しました。一番最初にhello world! を表示するものです。 hello.pyを作ってpython hello.py とすると実行するようです。 hello.pyの内容ですが、あるサイト(以下の画像)では、 print "Hello, Wordl!" とありますが、私の環境では動かず、さらにサイトを検索して、 print ( "Hello, Wordl!" ) が正しいとのことで、こちらは問題なく動作しました。 また、このprintコマンドですが、編集画面で左詰めでないとダメで、コマンドの前の空白(インデント)があったら正しく動作しないとのことです。 このようなささいな違い、またプログラム編集上の作法の問題とかを見ると、この言語の習得は難しいように感じてしまいます。アルゴリズムの完全性とか、文法上の問題が完全にクリアになってもなぜが動作しない、という問題に直面しそうなのですが。自分の知らない何かのしきたりに違反しているという状態で、しかもそれが本質的でないように見える言語仕様(先のインデントがダメという問題)というのであれば、後からいろいろ出てきそうなのですが。例えば、”コマンドは第一文字が大文字でなければならない”とかです。数百、数千行のコードを書いたりすると、間違いの可能性のあるところが目に見えないところにいっぱいという感じがするのですが。バグフィックスというのは絶対に絶対に間違いない、と断言してそれでいてうっかりミスが見つかるわけです。”間違っているかもしれないな”じゃバグフィックスできません。 それでいて割と巷間ではpython人気という感じがしているのですが。 pythonのどこがいい、ということなのでしょうか。私が考えている困難を補う効用があるのでしょうか。 私の環境はanaconda 3.5です。バージョン毎にかなり違うのでしょうか。

  • VB2008: 独自例外とは?

    独自例外の確認ための質問をします。 独自例外の発生をキャッチして表示する術がわからなくて苦肉の策でエラートラップを利用。 しかし、こういう事であれば何も独自例外を設定する必要がありません。 と思ったり、「スルーだからテストに<0除算>を選んだのが悪いのか?」と考えたり。 ともかく、判っているのか判っていないのかが判らない状態に陥っています。 そういうことで、独自例外について少し教えて頂ければ幸いです。 ' ============================== ' クラスプログラミング; 演習2 ' ============================== Module theClass   Sub Main()     On Error GoTo Error_Main     Dim T1 As New TEST1     Debug.Print(T1.MembersLengthAverage.ToString) Exit_Main:     Exit Sub Error_Main:     ErrorMsg(Err.Description & "(Main)")     Resume Exit_Main   End Sub End Module ' ================================================================== ' クラス TEST1 ' ================================================================== <Serializable()> Public Class TEST1   Private _MemberCount As Integer   Private _Member1 As String   Private _Member2 As String    ReadOnly Property MembersLengthAverage() As Integer     Get       If _MemberCount <> 0 Then         Return (_Member1.Length + _Member2.Length) \ _MemberCount       Else         Throw New System.Exception("TEST1: 除算エラーが発生しました。" )       End If     End Get   End Property   Public Sub New()     _Member1 = ""     _Member2 = ""   End Sub End Class

  • pythonの固定長の集計について

    python3.0を使ってテキストデータ(固定長)に関する集計方法の質問です。 テキストデータ(data.txt)の中身は以下となっております。 01010500 01020150 01021000 02011000 02010600 02020300 データレイアウトはは以下となっております。 最初の2文字(1~2カラム):売り手の番号 次の2文字(2~4カラム):書い手の番号 次の4文字(5~8):円 集計方法 売り手番号、買い手番号別の金額を集計させたいです。 アウトプット例(表側に売り手、表頭に買い手) ********1********2 1*****500*****1150 2****1600******300 「*」は、OKWaveに投稿するときに、スペースが削除されて、表が崩れてしまうため、便宜的に入れたものです。 アウトプットでは、スペースが入っている助かります。 上記のようなテキストデータ(data.txt)を1.読み込んで、2.集計し、3新しいテキストファイル又は.csvに書き込む、 方法を教えていただけませんでしょうか。 よろしくお願いいたします。

  • Python2.6で日本語(UTF-8)が文字化けしてしまいます。

    Python2.6で日本語(UTF-8)が文字化けしてしまいます。 非常に困ってます。よろしくお願いします。 使用OS Windows7 使用エディタ SciTE #coding: shift-jisだとエラーがでます。 標準入力、標準出力、標準エラー出力の文字コード cp932 コード # coding: utf-8 import random class Dice: def __init__(self,val=6): if val not in [4,6,8,12,20]: raise Exception('そんな正多面体はありません。') self.face_num = val def shoot(self): return random.randint(1,self.face_num) ------------------------------------------------------------ 実行 C:\Users\eric\pyworks>python Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import dice >>> a =dice.Dice(9) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "dice.py", line 8, in __init__ raise Exception('縺昴s縺ェ豁」螟夐擇菴薙・縺ゅj縺セ縺帙s縲・) Exception: 縺昴s縺ェ豁」螟夐擇菴薙・縺ゅj縺セ縺帙s縲

  • python: nonlocalとglobal文

    pythonで次のような関数の書き方がチュートリアル本に書かれていました ------------------------------------------- スコープと名前空間の例 def scope(): loc = "abc" def do_local(): loc = "local" def do_nonlocal(): nonlocal loc loc = "nonlocal" def do_global(): global loc loc = "global" ------------------------------------------- VS Codeでブレークポイントを置き走らせ、 nonlocal loc → loc = "nonlocal" global loc →loc = "global" の代入(バインディング?)が起こることはわかりました チュートリアル本では、nonlocalとglobalは次のように書かれています 説明文 nonlocal文 その変数が自分を取り囲むスコープにある global文 その変数がグローバルスコープにある 質問; 上の2行(説明文)の 1)nonlocal文 その変数が自分を取り囲むスコープにある 2)global文 その変数がグローバルスコープにある これらのスコープが何、どこ、どのように、指しているか教えてください また 3)これらと名前空間の関係をわかりやすく教えてください (本ではわからず) 【回答上のご注意】 回答は、解答(答え)を求めています わたしはプログラマーではないので、昭和的な「自分で考えろ」的なものは求めていません わからなければ答えない自由もあなたにはあります 不明点があれば説明いたします

  • 例外処理をするソースコードについて

    例外処理するソースコードについて質問があります。 まず例外処理される前のファイルのソースコードを見てください。 public class JTest13 { public static void main(String[] args) { System.out.println("実行開始"); long lngTmp; //以下を実行した瞬間に引数が無いか、整数に直せなかったら例外がスローされる lngTmp = Long.parseLong(args[0]); //割り算を実行する(小数点以下の数値を管理する必要がある)ため、double型に変換します System.out.println(Double.parseDouble(args[0]) / 2); System.out.println("tryブロック終了"); System.out.println("実行終了"); } } ここでアルファベットを入力すると、 実行開始 Exception in thread "main" java.lang.NumberFormatException: For input string: "a" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Long.parseLong(Unknown Source) at java.lang.Long.parseLong(Unknown Source) at JTest13.main(JTest13.java:20) これで例外処理クラスがNumberFormatExceptionだと分かるんですが、 こういう結果がでなければいけません。 実行開始 例外:java.lang.NumberFormatException For input stirng:"a" 引数を整数で入力して下さい。 実行終了 これで問題なのがmainメソッドで例外処理するのではなく、整数チェック用のメソッド内でエラー処理するプログラムを作らなければならない事です。 変数がargs[0]なのでどうやってメソッドを作っていいのか分かりません。 ヒントだけでいいので、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう