summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormahesh2017-10-27 02:22:08 +0530
committermaheshgudi2017-11-07 14:50:09 +0530
commit72b3d672735f624064431cbb0751d3cc3b08b6ba (patch)
treecd1ea7fa1c14a82813c973ff62fb9c1e067b3291
parent16e8d4b3c096e6034c0066adffc8f5a520f272c7 (diff)
downloadonline_test-72b3d672735f624064431cbb0751d3cc3b08b6ba.tar.gz
online_test-72b3d672735f624064431cbb0751d3cc3b08b6ba.tar.bz2
online_test-72b3d672735f624064431cbb0751d3cc3b08b6ba.zip
Add traceback for exceptions
-rw-r--r--yaksh/python_assertion_evaluator.py22
-rw-r--r--yaksh/templates/exam.html28
2 files changed, 32 insertions, 18 deletions
diff --git a/yaksh/python_assertion_evaluator.py b/yaksh/python_assertion_evaluator.py
index 35a08ec..af89fc3 100644
--- a/yaksh/python_assertion_evaluator.py
+++ b/yaksh/python_assertion_evaluator.py
@@ -75,23 +75,23 @@ class PythonAssertionEvaluator(BaseEvaluator):
except TimeoutException:
raise
except AssertionError:
- type, _, tb = sys.exc_info()
- tb_info = traceback.extract_tb(tb)
- filename, line, func, text = tb_info[-1]
+ exc_type, exc_value, exc_tb = sys.exc_info()
value = "Expected answer from the test case didnt match the output"
err = {"type": "assertion",
"test_case": self.test_case,
- "exception": type.__name__,
- "message": value
+ "exception": exc_type.__name__,
+ "message": value,
}
except Exception:
- type, value, tb = sys.exc_info()
- tb_info = traceback.extract_tb(tb)
- filename, line, func, text = tb_info[-1]
+ exc_type, exc_value, exc_tb = sys.exc_info()
+ tb_list = traceback.format_exception(exc_type, exc_value, exc_tb)
+ if len(tb_list) > 2:
+ del tb_list[1:3]
+
err = {"type": "assertion",
- "test_case": self.test_case,
- "exception": type.__name__,
- "message": str(value)
+ "traceback": "".join(tb_list),
+ "exception": exc_type.__name__,
+ "message": str(exc_value)
}
else:
diff --git a/yaksh/templates/exam.html b/yaksh/templates/exam.html
index 7b6d54e..8b573d4 100644
--- a/yaksh/templates/exam.html
+++ b/yaksh/templates/exam.html
@@ -91,17 +91,31 @@
{% if not error.type %}
<pre><code> {{error|safe}} </code></pre>
{% elif error.type == 'assertion' %}
- We tried the calling your function with the following test case:<br/>
- <pre><code><strong>{{error.test_case}}</strong></code></pre>
- <table>
- <tr> But the following error took place: </tr>
- <tr>
- <td>Exception Name</td>
+ {% if error.test_case %}
+ <table class="table table-bordered">
+ <col width="30%">
+ <tr class = "active">
+ <td> We tried calling your function with the following test case:</td>
+ <td><code><strong>{{error.test_case}}</strong></code></td>
+ </tr>
+ </table>
+ {% endif %}
+ <p> <b>The following error took place: </b></p>
+ <table class="table table-bordered" width="100%">
+ <col width="30%">
+ <tr class = "active">
+ <td><b>Exception Name: </b></td>
<td><mark style="background-color:#ff9999;">{{error.exception}}</mark>
</td>
</tr>
<tr>
- <td>Exception Message</td><td>{{error.message}}</td>
+ <td><b>Exception Message: </b></td><td>{{error.message}}</td>
+ </tr>
+ <tr>
+ {% if error.traceback %}
+ <td><b>Full exception: </b></td>
+ <td><pre>{{error.traceback}}</pre></td>
+ {% endif %}
</tr>
</table>
{% elif error.type == 'stdio' %}