MCPcopy Create free account
hub / github.com/apache/pig / write_user_exception

Function write_user_exception

src/python/streaming/pig_util.py:29–85  ·  view source on GitHub ↗
(filename, stream_err_output, num_lines_offset_trace=0)

Source from the content-addressed store, hash-verified

27 return wrap
28
29def write_user_exception(filename, stream_err_output, num_lines_offset_trace=0):
30 import sys
31 import traceback
32 import inspect
33 (t, v, tb) = sys.exc_info()
34 name = t.__name__
35 record_error = False
36
37 if name in ['SyntaxError', 'IndentationError']:
38 syntax_error_values = v.args
39 user_line_number = syntax_error_values[1][1] - num_lines_offset_trace
40 error_message = "%s: %s\n\tFile: %s, line %s column %s\n\t%s" % \
41 (name,
42 syntax_error_values[0],
43 syntax_error_values[1][0],
44 user_line_number,
45 syntax_error_values[1][2],
46 syntax_error_values[1][3])
47 else:
48 error_message = "%s: %s\n" % (name, v)
49 user_line_number = None
50 while 1:
51 e_file_name = tb.tb_frame.f_code.co_filename
52 if e_file_name.find(filename) > 0:
53 record_error = True
54 if not record_error:
55 if not tb.tb_next:
56 break
57 tb = tb.tb_next
58 continue
59
60 line_number = tb.tb_lineno
61 mod = inspect.getmodule(tb)
62 if mod:
63 lines, offset = inspect.getsourcelines(mod)
64 line = lines[line_number - offset - 1]
65 else:
66 #Useful to catch exceptions with an invalid module (like syntax
67 #errors)
68 lines, offset = inspect.getsourcelines(tb.tb_frame)
69 if (line_number - 1) >= len(lines):
70 line = "Unknown Line"
71 else:
72 line = lines[line_number - 1]
73
74 user_line_number = line_number - num_lines_offset_trace
75 func_name = tb.tb_frame.f_code.co_name
76 error_message += 'File %s, line %s, in %s\n\t%s\n' % \
77 (e_file_name, user_line_number, func_name, line)
78 if not tb.tb_next:
79 break
80 tb = tb.tb_next
81 if name in ['UnicodeEncodeError']:
82 error_message += "\nTo print a unicode string in your udf use encode('utf-8'). Example: \n\tprint 'Example'.encode('utf-8')"
83 if user_line_number:
84 stream_err_output.write("%s\n" % user_line_number)
85 stream_err_output.write("%s\n" % error_message)

Callers 1

mainMethod · 0.90

Calls 2

findMethod · 0.80
writeMethod · 0.45

Tested by

no test coverage detected