From 70221eb031d1bc7b0c4dcc0286e3b4a8ac680718 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sat, 29 Aug 2020 14:17:56 +0800 Subject: [PATCH] Expose cvxpy DCP trace in case of error (#173) --- pypfopt/base_optimizer.py | 4 ++-- pypfopt/exceptions.py | 8 +------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/pypfopt/base_optimizer.py b/pypfopt/base_optimizer.py index bd4566e..4bda992 100644 --- a/pypfopt/base_optimizer.py +++ b/pypfopt/base_optimizer.py @@ -215,8 +215,8 @@ class BaseConvexOptimizer(BaseOptimizer): opt.solve(solver=self.solver, verbose=True) else: opt.solve() - except (TypeError, cp.DCPError): - raise exceptions.OptimizationError + except (TypeError, cp.DCPError) as e: + raise exceptions.OptimizationError from e if opt.status != "optimal": raise exceptions.OptimizationError self.weights = self._w.value.round(16) + 0.0 # +0.0 removes signed zero diff --git a/pypfopt/exceptions.py b/pypfopt/exceptions.py index 77df33c..c5b5582 100644 --- a/pypfopt/exceptions.py +++ b/pypfopt/exceptions.py @@ -3,7 +3,6 @@ The ``exceptions`` module houses custom exceptions. Currently implemented: - OptimizationError """ -import traceback class OptimizationError(Exception): @@ -16,9 +15,4 @@ class OptimizationError(Exception): default_message = ( "Please check your objectives/constraints or use a different solver." ) - - if not (args or kwargs): - args = (default_message,) - super().__init__(*args, **kwargs) - - traceback.print_exc() + super().__init__(default_message, *args, **kwargs)