У меня есть функция поместить внутри except
часть try
, и я хочу, чтобы она регистрировала информацию об ошибке. Проблема в том, что я не могу получить строку кода, которая вызвала ошибку, как я мог это сделать раньше. Взгляните на этот код:linecache.getline() ничего не возвращает
def func():
try:
a = 1
b = 0
print a/b
except:
Debug.log()
И это логарифмическая функция:
def log(cls):
try:
exc_type, exc_obj, tb = sys.exc_info()
f = tb.tb_frame
line_no = str(tb.tb_lineno)
filename = f.f_code.co_filename
linecache.checkcache(filename)
line = linecache.getline(filename, line_no, f.f_globals)
current_frame = inspect.currentframe()
previous_frame = current_frame.f_back
func_name = previous_frame.f_code.co_name
msg = str(exc_obj)
obj = Error()
obj.filename = filename
obj.line_no = line_no
obj.line = line
obj.msg = msg
obj.function = func_name
obj.save()
После выполнения я могу видеть, строка пустая:
{
"_id" : ObjectId("5413d67a65765f16219aa575"),
"filename" : "E:/Developer Center/DomainServices/DomainServices/test.py",
"line_no" : "23",
"line" : "",
"msg" : "integer division or modulo by zero",
"function" : "func",
}
Что случилось?