pythonの例外処理は遅くない?

投稿者: Anonymous 今までC++やC#を触っていたのですが、たまにpythonも触っていました。 先日pythonのイテレータを見ていたら、イテレータの終了がraise StopIteration()で規定されていて、違和感を感じました。 C#等では「例外のcatchはかなり遅い」というのが常識だと思っていました。 少なくとも、こういう場面で安易に用いるようなものではないと思います。 もしかして、pythonでは例外処理はそこまで遅くないのでしょうか?高頻度でraiseしても大丈夫でしょうか? 解決 同じ質問が英語の方でありました。 https://stackoverflow.com/questions/20115954/would-a-stopiteration-make-python-slow 要は StopIteration に関してはコストが大きくならないように対処されていて、そのへんはPEP0234で言及されているとのことです。 https://www.python.org/dev/peps/pep-0234/ Pythonでもほかの例外の捕捉のコストは基本大きいですよ。ドキュメントに書いてあるとおり、 実際に例外を捕捉するのは高価です。 (※ただし StopIteration は除く) です。 回答者: Anonymous

Pythonをタスクスケジューラで起動したときのエラーについて

投稿者: Anonymous Windows10環境のタスクスケジューラよりPythonを起動し、win32comを利用してOutlookからメールを送信しようとしていたのですが、以下のエラーが発生してしまいメールが送信できずに困っております。 どなたか回避策等ご存知でしたらご教示願えますでしょうか。 ※ VSCode上からの実行では問題なく送信できています。。。 2018-04-25 22:06:12,455 – logExample – ERROR – Error do something: (-2146959355, ‘サーバーの実行に失敗しました’, None, None) Traceback (most recent call last): File “C:Program FilesPythonPython3.6.5libsite-packageswin32comclientdynamic.py”, line 89, in _GetGoodDispatch IDispatch = pythoncom.connect(IDispatch) pywintypes.com_error: (-2147221021, ‘操作を利用できません’, None, None) During handling of the above exception, another exception occurred: Traceback (most recent call last): File…(Continue Reading)

リポジトリパターンにおける例外の依存について

投稿者: Anonymous Laravel5を使った開発でinterfaceを利用したリポジトリパターンを用いようと思っています。 そこでEloquentのsave()やfindOrFail()等が投げる例外をドメイン層やアプリケーション層で処理すると、その部分がインフラストラクチャ層に依存してしまう(リポジトリの実装を入れ替えた際に上のレイヤーで問題が起こる)と思うのですが、インフラストラクチャ層で一度例外をキャッチし、独自に作成した例外を投げ直すなどの処理を行う方がよいのでしょうか。 解決 Laravel5もEloquentも分からないですが、一般論として話せそうなので回答してみます。 このようなケースでは、独自の例外クラスをドメイン層やアプリケーション層に定義し、インフラ層で発生した例外をその独自例外に変換して再スローするのが良いと思います。 ※インフラ層は、ドメイン層やアプリケーション層に依存できますよね? 当然ですが、この独自例外は、ドメイン層であれば「ドメインモデルの言葉」として表現されるクラスであるべきですし、アプリケーション層のものであればアプリケーション層での言葉を使います。 ※ドメインモデルにその例外が発生した状況を表す言葉が無いのであれば、恐らくそれはドメイン層ではなく、アプリケーション層に定義すべき例外なのだと判断できます。 回答者: Anonymous

junitで、1つのクラスに2つの@Testのアノテーションをつけたメソッドを書くとNoSuchElementExceptionが出る。

投稿者: Anonymous 今、しりとりのゲームを作ろうと思い、Javaでプログラミングしています。 Junitに以下のようなテストケースを書いたところ、NoSuchElementExceptionが出てしまいます。 import java.io.ByteArrayInputStream; import java.io.InputStream; import org.junit.Test; import static org.junit.Assert.*; public class IOProcessorTest { @Test public void testPromptInput() { String input = “シリトリ 1 しりとり 2 シリトリ 1 シリトリ f 1”; InputStream in = new ByteArrayInputStream(input.getBytes()); System.setIn(in); assertEquals(“シリトリ”, IOProcessor.promptInput(“テストします。”)); assertEquals(“シリトリ”, IOProcessor.promptInput(“テストします。”)); assertEquals(“シリトリ”, IOProcessor.promptInput(“テストします。”)); } @Test public void testConvertToKata() { assertEquals(“シリトリ”, IOProcessor.convertToKata(“しりとり”)); assertEquals(“シリトリ”,…(Continue Reading)

Haskell Snappy パッケージの decompress を利用した場合の例外処理について

投稿者: Anonymous Snappy パッケージの下記 decompress を利用する際、どのようにコーディングを行えば例外処理が出来るでしょうか? decompress :: ByteString -> ByteString Decompress data in the Snappy format. If the input is not compressed or is corrupt, an exception will be thrown. try を利用した場合 Left になると思ったのですが、結果は Right となってします。 ghci> import Data.ByteString ghci> import Control.Exception ghci> import Codec.Compression.Snappy ghci> let bs = “test” :: ByteString ghci> decompress…(Continue Reading)

servlet によって、エラー用JSPに遷移した時にエラーコード、またはエラー名を受け取りたい

投稿者: Anonymous 現在、servletで <error-page> <error-code>404</error-code> <location>/エラーページ.jsp</location> </error-page> <error-page> <error-code>405</error-code> <location>/エラーページ.jsp</location> </error-page>   という設定をしており、ページ遷移後に何のエラーによって遷移してきたかを判断したいと考えております。 そのために、エラーコードまたはエラー名をエラーページ.jspで取得したいのですが、方法が分かりません。 解決方法の分かる方がいましたらご教授をお願いします。 また、<%= exception %>やリクエストの中身には、目的のデータは格納されていないようでした。servletの設定方法で、パラメータを渡す設定が出来ないか調査しています。 解決 error-pageで制御せず、servletでfilterを設定します。 filterで指定したクラス内の処理で、リクエストにエラー文言を入れます。 error-pageを使用していないので、エラー種別はjava側で判定し割り出すしかないです。 例えあ、アクセスURL内に特定の文言が含まれていない場合は不正アクセスとする など・・ 回答者: Anonymous

Call can throw, but it is not marked with ‘try’ and the error is not handled

投稿者: Anonymous Kotlinにある mapNotNull を実装しようとして(Swiftなので名前はmapNotNilの方が適切か?) Call can throw, but it is not marked with ‘try’ and the error is not handled というエラーが出ました。 extension Array { func mapNotNull<ElementOfResult>(_ transform: (Element) throws -> ElementOfResult) rethrows -> [ElementOfResult] { return self.compactMap { $0 }.map { transform($0) // ここでエラー } } } メソッド定義を func mapNotNull<ElementOfResult>(_ transform: (Element) -> ElementOfResult)…(Continue Reading)

pythonでpass文でつぶしてあるエラーを取得する

投稿者: Anonymous Pythonでpassをフックすることはできますか? try: … except Exception: pass 上のようなエラー処理をしている部分が多いコードがありエラーを握りつぶしてしまっています。 一つ一つ書き換えてもいいのですが、数が多く大変です。消してしまっているエラーを取得する、なにかいい方法はありますか? 解決 ast パッケージを利用する方法もあるかと思います。 pass2tb.py import sys import ast import astunparse class Pass2Traceback(ast.NodeTransformer): trace_stmt = ‘import traceback;traceback.print_exc()’ def visit_Try(self, node): for h in node.handlers: if len(h.body) == 1 and isinstance(h.body[0], ast.Pass): h.body = ast.parse(self.trace_stmt).body return node t = ast.parse(open(sys.argv[1], ‘r’).read()) Pass2Traceback().visit(t) print(astunparse.unparse(t)) try … except ノードの…(Continue Reading)

OCamlで例外からスタックトレースを取得する方法

投稿者: Anonymous OCamlでexn型の値からスタックトレースを取得する方法はありますでしょうか?JavaのgetStackTrace()のような。 標準のPrintexcモジュールを探したのですが、現在のスタックトレースを取得する Printexc.get_backtrace はあるものの、例外からこしらえる方法が分かりませんでした。 参考: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Printexc.html 例えば次のようなプログラムで、work関数が失敗したときのスタックトレースを処理したいことなどがあります。 open Batteries let work () = … let _ = match wrap work () with | Ok result -> print_endline result | Bad e -> (* ここでスタックトレースも出力したい *) prerr_endline (Printexc.to_string e); exit 1 コマンドラインのシステムなら単純にraiseで例外を投げてしまうのもアリかもしれませんが、ログファイルに保存したり、DBに保存したりしたいこともあると思うのです。 解決 OCaml 4.03.0, batteries.2.5.2 で次のプログラムを環境変数 OCAMLRUNPARAM に b を設定するとバックトレースは出力されます: (* with export…(Continue Reading)

JavaFXで表に画像を表示できなくて困っています。

投稿者: Anonymous 学校でソーシャルゲームを作っている最中、編成画面のために配列を解読して表を作成するプログラムを作ろうとした所、ResourceBundleがnullでセル内部に画像を表示できない状況です。 Cards.javaの最終的なコード: class csvData{ // 列数 static int NUMBER = 5+1+10+3+2+5+3+3;//chara static String[][] charlist = csvlist_hen.setload(“_chara.csv”,NUMBER); static String[][] wepidlist = csvlist_hen.setload(“_wep.csv”,13); static String[][] abidlist = csvlist_hen.setload(“_ability.csv”,14); } class cmain{ private String here = (getClass().getResource(“./”)).toString();//※追加箇所 private Image cimage; private int x = 0; private int y = 0; public Image getcimage(){ if(this.cimage != null){…(Continue Reading)

with文で例外が発生した場合に、処理を飛ばす方法

投稿者: Anonymous 以下のコードでlocalという変数に格納されたアドレスにある圧縮ファイルを解凍しようとした場合に、もしもlocalという圧縮ファイルが存在せず、FileNotFoundErrorが発生したらlocalに対する処理を飛ばしたいです。 どのように以下のコードを変えれば上の問題は解決するでしょうか…? コード # coding: utf-8 import csv import zipfile import re #import io #import sys root_dir = ‘/Users/bigbird/Documents/UROP_data’ #root_dir =’/home/firebird555/note2′ with open(‘local_process.csv’, ‘r’) as f: reader = csv.reader(f) #pointer.csvという新しいcsvファイルを以下で作る。 g = open(‘pointer.csv’, ‘a’) #閉じるのを忘れずに…! csvWriter = csv.writer(g) header = next(reader) # ヘッダーを読み飛ばしたい時 csvWriter.writerow(header) for row in reader:# local_process.csvのデータを1行づつ取得できる local = row[2]#localでzipファイルのある場所。…とか言いつつ無い可能性もあるのでチェック(例外処理)が必要。 with…(Continue Reading)