Skip to content

Commit a44e4f4

Browse files
author
fundead
committed
Merge pull request #9 from GreatFruitOmsk/master
Under certain conditions exc_traceback can be empty or even None.
2 parents 1cd2d39 + d110288 commit a44e4f4

File tree

4 files changed

+38
-18
lines changed

4 files changed

+38
-18
lines changed

python2/raygun4py/raygunmsgs.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,19 @@ class RaygunErrorMessage:
8989
def __init__(self, exc_type, exc_value, exc_traceback, className):
9090
self.message = "%s: %s" % (exc_type.__name__, exc_value)
9191
self.stackTrace = []
92-
93-
for trace in traceback.extract_tb(exc_traceback):
94-
self.stackTrace.append({
95-
"lineNumber": trace[1],
96-
"className": trace[2],
97-
"fileName": trace[0],
98-
"methodName": trace[3],
92+
traces = traceback.extract_tb(exc_traceback)
93+
94+
if traces:
95+
for t in traces:
96+
self.stackTrace.append({
97+
"lineNumber": t[1],
98+
"className": t[2],
99+
"fileName": t[0],
100+
"methodName": t[3],
99101
})
100102

101-
self.className = trace[2]
103+
self.className = traces[-1][2] or className
104+
else:
105+
self.className = className
106+
102107
self.data = ""

python2/tests/test_raygunmsgs.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,13 @@ def test_user(self):
4040
self.assertEqual(self.builder.raygunMessage.details['user'], { 'identifier': 'user1' })
4141

4242

43+
class TestRaygunErrorMessage(unittest.TestCase):
44+
def test_exc_traceback_is_none(self):
45+
raygunmsgs.RaygunErrorMessage(int, 1, None)
46+
47+
4348
def main():
4449
unittest.main()
4550

4651
if __name__ == '__main__':
47-
main()
52+
main()

python3/raygun4py/raygunmsgs.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,19 @@ class RaygunErrorMessage:
8989
def __init__(self, exc_type, exc_value, exc_traceback, className):
9090
self.message = "%s: %s" % (exc_type.__name__, exc_value)
9191
self.stackTrace = []
92-
93-
for trace in traceback.extract_tb(exc_traceback):
94-
self.stackTrace.append({
95-
"lineNumber": trace[1],
96-
"className": trace[2],
97-
"fileName": trace[0],
98-
"methodName": trace[3],
92+
traces = traceback.extract_tb(exc_traceback)
93+
94+
if traces:
95+
for t in traces:
96+
self.stackTrace.append({
97+
"lineNumber": t[1],
98+
"className": t[2],
99+
"fileName": t[0],
100+
"methodName": t[3],
99101
})
100102

101-
self.className = trace[2]
103+
self.className = traces[-1][2] or className
104+
else:
105+
self.className = className
106+
102107
self.data = ""

python3/tests/test_raygunmsgs.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,13 @@ def test_user(self):
4040
self.assertEqual(self.builder.raygunMessage.details['user'], { 'identifier': 'user1' })
4141

4242

43+
class TestRaygunErrorMessage(unittest.TestCase):
44+
def test_exc_traceback_is_none(self):
45+
raygunmsgs.RaygunErrorMessage(int, 1, None)
46+
47+
4348
def main():
4449
unittest.main()
4550

4651
if __name__ == '__main__':
47-
main()
52+
main()

0 commit comments

Comments
 (0)