2011-08-16 10 views
1

は私の問題の説明です:Python - 例外を発生させるかどうかここ

ので、同様に、私は、テーブル名の束を取り、彼らの前に接頭辞を配置するタスクを持っている:

PREFIX = 'foo_'; 

prefixed_tablename = "".join([PREFIX, tablename[:27]]) 

(テーブル名が30文字を超えてはなりません(いくつかのOracle DBの制限)、これは私が最初の27文字を取る理由です)。

これで、タブー名の最後の3文字だけが異なる場合は、重複したタブー名になることがあります。

私は一意のテーブル名を作成するためのいくつかのファンシーアルゴリズムを実装することができましたが、重複する名前を検出するだけで十分です。だから、私はそれらをセットに格納することを考えました。接頭語tablenameを作成する場合は、セットをチェックして、そのようなtablenameがすでに存在するかどうかを確認してください。

は今、本当の問題のために:重複が検出されてしまった場合

、私は私のスクリプトがエラーのいくつかの種類を示す、実行を停止する必要があります。 Javaでは、私は例外を発生させるだけですが、Pythonでこれが望ましい方法であるかどうかはわかりません。

例外を発生させるか、メッセージを出力して終了する必要がありますか?

+1

.join([PREFIX、tablename])[:30] ';を実行した方が良いでしょう。プレフィックスの長さを変更すると(31文字の状況@agfが指摘されている点を除いて)、それは引き続き機能します。 – JasonFruit

+3

また、 'name_limit = 30'を実行してから' '" .join([PREFIX、tablename])[:name_limit] 'を実行する方が良いでしょう。将来の世代は30の意味を疑問に思っていません。その制限を持たない別のDBバックエンド –

+0

@Alexanderか、それとも正しく文書化してください。 – agf

答えて

4

27 + 4 = 31

なぜ例外は使用しませんか?後で終了するだけでなく、例外をキャッチして外側のスコープで何かを行う場合は、sys.exitを使用する場合よりも変更することが少なくなります。

2

Pythonの例外は、実際にはJavaよりもかなり自由に使用されます(たとえば、イテレータは反復を停止するときに内部的にそれらを使用します)。これが実際に「例外的」な状況、つまりこれが頻繁に起こらない場合は、例外として例外を発生させる完璧な状況です。

1

例外を提起する必要があります。メッセージで例外を構成すると、スクリプトは必要なメッセージとともに終了し、エラーの処理方法を変更したい場合は、例外を発生させたほうが簡単かもしれません。また、大規模なプログラムの一部としてこのコードを使用した場合、大きなプログラムで個別にエラーを処理する方法を決定することができます。

関連する問題