2017-01-23 8 views
0

私はパンダを使って短いデータ解析スクリプトを作成し、結果をグラフ付きのExcelシートに書き出します。手続き型のPythonスクリプトでカスタムエラーを発生させる

現在、私はsys.exitを使用して、入力データに関連する問題をユーザーに認識させています。以下

例である。あるケースで

if len(titles) != len(plot_key): 
    raise sys.exit('Error: Number of chart titles does not equal the number of plots to be generated') 

条件はTrueであり、値がある場合、私はユーザ

if df[df.Well > 3].empty is False: 
    sys.exit('Error: Data contains more than 3 wells.') 

と変数に格納されているより多くの情報を共有したいですin df[df.Well > 3]私はdf[df.Well > 3]のインデックスをユーザーと共有して、問題がどこにあるかを知るようにしたいと考えています。

今私はこれをやっていますが、ハックのようです。

if df[df.Well > 3].empty is False: 
    print df[df.Well > 3].index.get_values() 
    sys.exit('Error: Data contains more than 3 wells.') 

ベストプラクティスに関するご意見は大変ありがたいです。

+2

'Exception'クラスと' __init__'または '__str__'メソッドから拡張した新しいクラスを作成して、データを渡すことができます。あるいは、例外を発生させることができます( "あなたの出力") ' –

答えて

0

カスタムエラーを発生させるpythonの方法は、独自の例外を定義することです。一つの基地カスタム例外であなたのカスタム例外のすべてを基づか

class MyCustomException(Exception): 
    pass 

class ChartTitles(MyCustomException): 
    pass 

class TooManyWells(MyCustomException): 
    pass 

if len(titles) != len(plot_key): 
    raise ChartTitles(
     'Number of chart titles does not equal the number of plots to be generated')  

if not df[df.Well > 3].empty: 
    raise TooManyWells(
     "Data contains more than 3 wells '%s'" % df[df.Well > 3].index.get_values()) 

それが簡単にあなたのすべての例外をキャッチすることができます:これは、次のようになります。

+0

これはついに私には意味があります。私はそれをクリックしたことがないオンラインで例外の100の "チュートリアル"を読んだ。より少ないオブジェクト指向のスクリプトでこれが依然として好ましい方法であるということだけが疑問ですか? – agf1997

+0

私は、例外がオブジェクト指向であるかオブジェクト指向ではないとは思わない。 –

+0

class = OOは定義されていませんか? – agf1997

関連する問題