Traceback模块官方英文描述:

  1. Help on module traceback:
  2.  
  3. NAME
  4. traceback - Extract, format and print information about Python stack traces.
  5.  
  6. FILE
  7. /usr/lib64/python2.7/traceback.py
  8.  
  9. FUNCTIONS
  10. extract_stack(f=None, limit=None)
  11. Extract the raw traceback from the current stack frame.
  12.  
  13. The return value has the same format as for extract_tb(). The
  14. optional 'f' and 'limit' arguments have the same meaning as for
  15. print_stack(). Each item in the list is a quadruple (filename,
  16. line number, function name, text), and the entries are in order
  17. from oldest to newest stack frame.
  18.  
  19. extract_tb(tb, limit=None)
  20. Return list of up to limit pre-processed entries from traceback.
  21.  
  22. This is useful for alternate formatting of stack traces. If
  23. 'limit' is omitted or None, all entries are extracted. A
  24. pre-processed stack trace entry is a quadruple (filename, line
  25. number, function name, text) representing the information that is
  26. usually printed for a stack trace. The text is a string with
  27. leading and trailing whitespace stripped; if the source is not
  28. available it is None.
  29.  
  30. format_exc(limit=None)
  31. Like print_exc() but return a string.
  32.  
  33. format_exception(etype, value, tb, limit=None)
  34. Format a stack trace and the exception information.
  35.  
  36. The arguments have the same meaning as the corresponding arguments
  37. to print_exception(). The return value is a list of strings, each
  38. ending in a newline and some containing internal newlines. When
  39. these lines are concatenated and printed, exactly the same text is
  40. printed as does print_exception().
  41.  
  42. format_exception_only(etype, value)
  43. Format the exception part of a traceback.
  44.  
  45. The arguments are the exception type and value such as given by
  46. sys.last_type and sys.last_value. The return value is a list of
  47. strings, each ending in a newline.
  48.  
  49. Normally, the list contains a single string; however, for
  50. SyntaxError exceptions, it contains several lines that (when
  51. printed) display detailed information about where the syntax
  52. error occurred.
  53.  
  54. The message indicating which exception occurred is always the last
  55. string in the list.
  56.  
  57. format_list(extracted_list)
  58. Format a list of traceback entry tuples for printing.
  59.  
  60. Given a list of tuples as returned by extract_tb() or
  61. extract_stack(), return a list of strings ready for printing.
  62. Each string in the resulting list corresponds to the item with the
  63. same index in the argument list. Each string ends in a newline;
  64. the strings may contain internal newlines as well, for those items
  65. whose source text line is not None.
  66.  
  67. format_stack(f=None, limit=None)
  68. Shorthand for 'format_list(extract_stack(f, limit))'.
  69.  
  70. format_tb(tb, limit=None)
  71. A shorthand for 'format_list(extract_stack(f, limit)).
  72.  
  73. print_exc(limit=None, file=None)
  74. Shorthand for 'print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file)'.
  75. (In fact, it uses sys.exc_info() to retrieve the same information
  76. in a thread-safe way.)
  77.  
  78. print_exception(etype, value, tb, limit=None, file=None)
  79. Print exception up to 'limit' stack trace entries from 'tb' to 'file'.
  80.  
  81. This differs from print_tb() in the following ways: (1) if
  82. traceback is not None, it prints a header "Traceback (most recent
  83. call last):"; (2) it prints the exception type and value after the
  84. stack trace; (3) if type is SyntaxError and value has the
  85. appropriate format, it prints the line where the syntax error
  86. occurred with a caret on the next line indicating the approximate
  87. position of the error.
  88.  
  89. print_last(limit=None, file=None)
  90. This is a shorthand for 'print_exception(sys.last_type,
  91. sys.last_value, sys.last_traceback, limit, file)'.
  92.  
  93. print_stack(f=None, limit=None, file=None)
  94. Print a stack trace from its invocation point.
  95.  
  96. The optional 'f' argument can be used to specify an alternate
  97. stack frame at which to start. The optional 'limit' and 'file'
  98. arguments have the same meaning as for print_exception().
  99.  
  100. print_tb(tb, limit=None, file=None)
  101. Print up to 'limit' stack trace entries from the traceback 'tb'.
  102.  
  103. If 'limit' is omitted or None, all entries are printed. If 'file'
  104. is omitted or None, the output goes to sys.stderr; otherwise
  105. 'file' should be an open file or file-like object with a write()
  106. method.
  107.  
  108. tb_lineno(tb)
  109. Calculate correct line number of traceback given in tb.
  110.  
  111. Obsolete in 2.3.
  112.  
  113. DATA
  114. __all__ = ['extract_stack', 'extract_tb', 'format_exception', 'format_...
  115.  
  116. (END)

traceback.py源码(Python2.7.5):

  1. """Extract, format and print information about Python stack traces."""
  2.  
  3. import linecache
  4. import sys
  5. import types
  6.  
  7. __all__ = ['extract_stack', 'extract_tb', 'format_exception',
  8. 'format_exception_only', 'format_list', 'format_stack',
  9. 'format_tb', 'print_exc', 'format_exc', 'print_exception',
  10. 'print_last', 'print_stack', 'print_tb', 'tb_lineno']
  11.  
  12. def _print(file, str='', terminator='\n'):
  13. file.write(str+terminator)
  14.  
  15. def print_list(extracted_list, file=None):
  16. """Print the list of tuples as returned by extract_tb() or
  17. extract_stack() as a formatted stack trace to the given file."""
  18. if file is None:
  19. file = sys.stderr
  20. for filename, lineno, name, line in extracted_list:
  21. _print(file,
  22. ' File "%s", line %d, in %s' % (filename,lineno,name))
  23. if line:
  24. _print(file, ' %s' % line.strip())
  25.  
  26. def format_list(extracted_list):
  27. """Format a list of traceback entry tuples for printing.
  28.  
  29. Given a list of tuples as returned by extract_tb() or
  30. extract_stack(), return a list of strings ready for printing.
  31. Each string in the resulting list corresponds to the item with the
  32. same index in the argument list. Each string ends in a newline;
  33. the strings may contain internal newlines as well, for those items
  34. whose source text line is not None.
  35. """
  36. list = []
  37. for filename, lineno, name, line in extracted_list:
  38. item = ' File "%s", line %d, in %s\n' % (filename,lineno,name)
  39. if line:
  40. item = item + ' %s\n' % line.strip()
  41. list.append(item)
  42. return list
  43.  
  44. def print_tb(tb, limit=None, file=None):
  45. """Print up to 'limit' stack trace entries from the traceback 'tb'.
  46.  
  47. If 'limit' is omitted or None, all entries are printed. If 'file'
  48. is omitted or None, the output goes to sys.stderr; otherwise
  49. 'file' should be an open file or file-like object with a write()
  50. method.
  51. """
  52. if file is None:
  53. file = sys.stderr
  54. if limit is None:
  55. if hasattr(sys, 'tracebacklimit'):
  56. limit = sys.tracebacklimit
  57. n = 0
  58. while tb is not None and (limit is None or n < limit):
  59. f = tb.tb_frame
  60. lineno = tb.tb_lineno
  61. co = f.f_code
  62. filename = co.co_filename
  63. name = co.co_name
  64. _print(file,
  65. ' File "%s", line %d, in %s' % (filename, lineno, name))
  66. linecache.checkcache(filename)
  67. line = linecache.getline(filename, lineno, f.f_globals)
  68. if line: _print(file, ' ' + line.strip())
  69. tb = tb.tb_next
  70. n = n+1
  71.  
  72. def format_tb(tb, limit = None):
  73. """A shorthand for 'format_list(extract_stack(f, limit))."""
  74. return format_list(extract_tb(tb, limit))
  75.  
  76. def extract_tb(tb, limit = None):
  77. """Return list of up to limit pre-processed entries from traceback.
  78.  
  79. This is useful for alternate formatting of stack traces. If
  80. 'limit' is omitted or None, all entries are extracted. A
  81. pre-processed stack trace entry is a quadruple (filename, line
  82. number, function name, text) representing the information that is
  83. usually printed for a stack trace. The text is a string with
  84. leading and trailing whitespace stripped; if the source is not
  85. available it is None.
  86. """
  87. if limit is None:
  88. if hasattr(sys, 'tracebacklimit'):
  89. limit = sys.tracebacklimit
  90. list = []
  91. n = 0
  92. while tb is not None and (limit is None or n < limit):
  93. f = tb.tb_frame
  94. lineno = tb.tb_lineno
  95. co = f.f_code
  96. filename = co.co_filename
  97. name = co.co_name
  98. linecache.checkcache(filename)
  99. line = linecache.getline(filename, lineno, f.f_globals)
  100. if line: line = line.strip()
  101. else: line = None
  102. list.append((filename, lineno, name, line))
  103. tb = tb.tb_next
  104. n = n+1
  105. return list
  106.  
  107. def print_exception(etype, value, tb, limit=None, file=None):
  108. """Print exception up to 'limit' stack trace entries from 'tb' to 'file'.
  109.  
  110. This differs from print_tb() in the following ways: (1) if
  111. traceback is not None, it prints a header "Traceback (most recent
  112. call last):"; (2) it prints the exception type and value after the
  113. stack trace; (3) if type is SyntaxError and value has the
  114. appropriate format, it prints the line where the syntax error
  115. occurred with a caret on the next line indicating the approximate
  116. position of the error.
  117. """
  118. if file is None:
  119. file = sys.stderr
  120. if tb:
  121. _print(file, 'Traceback (most recent call last):')
  122. print_tb(tb, limit, file)
  123. lines = format_exception_only(etype, value)
  124. for line in lines:
  125. _print(file, line, '')
  126.  
  127. def format_exception(etype, value, tb, limit = None):
  128. """Format a stack trace and the exception information.
  129.  
  130. The arguments have the same meaning as the corresponding arguments
  131. to print_exception(). The return value is a list of strings, each
  132. ending in a newline and some containing internal newlines. When
  133. these lines are concatenated and printed, exactly the same text is
  134. printed as does print_exception().
  135. """
  136. if tb:
  137. list = ['Traceback (most recent call last):\n']
  138. list = list + format_tb(tb, limit)
  139. else:
  140. list = []
  141. list = list + format_exception_only(etype, value)
  142. return list
  143.  
  144. def format_exception_only(etype, value):
  145. """Format the exception part of a traceback.
  146.  
  147. The arguments are the exception type and value such as given by
  148. sys.last_type and sys.last_value. The return value is a list of
  149. strings, each ending in a newline.
  150.  
  151. Normally, the list contains a single string; however, for
  152. SyntaxError exceptions, it contains several lines that (when
  153. printed) display detailed information about where the syntax
  154. error occurred.
  155.  
  156. The message indicating which exception occurred is always the last
  157. string in the list.
  158.  
  159. """
  160.  
  161. # An instance should not have a meaningful value parameter, but
  162. # sometimes does, particularly for string exceptions, such as
  163. # >>> raise string1, string2 # deprecated
  164. #
  165. # Clear these out first because issubtype(string1, SyntaxError)
  166. # would raise another exception and mask the original problem.
  167. if (isinstance(etype, BaseException) or
  168. isinstance(etype, types.InstanceType) or
  169. etype is None or type(etype) is str):
  170. return [_format_final_exc_line(etype, value)]
  171.  
  172. stype = etype.__name__
  173.  
  174. if not issubclass(etype, SyntaxError):
  175. return [_format_final_exc_line(stype, value)]
  176.  
  177. # It was a syntax error; show exactly where the problem was found.
  178. lines = []
  179. try:
  180. msg, (filename, lineno, offset, badline) = value.args
  181. except Exception:
  182. pass
  183. else:
  184. filename = filename or "<string>"
  185. lines.append(' File "%s", line %d\n' % (filename, lineno))
  186. if badline is not None:
  187. lines.append(' %s\n' % badline.strip())
  188. if offset is not None:
  189. caretspace = badline.rstrip('\n')[:offset].lstrip()
  190. # non-space whitespace (likes tabs) must be kept for alignment
  191. caretspace = ((c.isspace() and c or ' ') for c in caretspace)
  192. # only three spaces to account for offset1 == pos 0
  193. lines.append(' %s^\n' % ''.join(caretspace))
  194. value = msg
  195.  
  196. lines.append(_format_final_exc_line(stype, value))
  197. return lines
  198.  
  199. def _format_final_exc_line(etype, value):
  200. """Return a list of a single line -- normal case for format_exception_only"""
  201. valuestr = _some_str(value)
  202. if value is None or not valuestr:
  203. line = "%s\n" % etype
  204. else:
  205. line = "%s: %s\n" % (etype, valuestr)
  206. return line
  207.  
  208. def _some_str(value):
  209. try:
  210. return str(value)
  211. except Exception:
  212. pass
  213. try:
  214. value = unicode(value)
  215. return value.encode("ascii", "backslashreplace")
  216. except Exception:
  217. pass
  218. return '<unprintable %s object>' % type(value).__name__
  219.  
  220. def print_exc(limit=None, file=None):
  221. """Shorthand for 'print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file)'.
  222. (In fact, it uses sys.exc_info() to retrieve the same information
  223. in a thread-safe way.)"""
  224. if file is None:
  225. file = sys.stderr
  226. try:
  227. etype, value, tb = sys.exc_info()
  228. print_exception(etype, value, tb, limit, file)
  229. finally:
  230. etype = value = tb = None
  231.  
  232. def format_exc(limit=None):
  233. """Like print_exc() but return a string."""
  234. try:
  235. etype, value, tb = sys.exc_info()
  236. return ''.join(format_exception(etype, value, tb, limit))
  237. finally:
  238. etype = value = tb = None
  239.  
  240. def print_last(limit=None, file=None):
  241. """This is a shorthand for 'print_exception(sys.last_type,
  242. sys.last_value, sys.last_traceback, limit, file)'."""
  243. if not hasattr(sys, "last_type"):
  244. raise ValueError("no last exception")
  245. if file is None:
  246. file = sys.stderr
  247. print_exception(sys.last_type, sys.last_value, sys.last_traceback,
  248. limit, file)
  249.  
  250. def print_stack(f=None, limit=None, file=None):
  251. """Print a stack trace from its invocation point.
  252.  
  253. The optional 'f' argument can be used to specify an alternate
  254. stack frame at which to start. The optional 'limit' and 'file'
  255. arguments have the same meaning as for print_exception().
  256. """
  257. if f is None:
  258. try:
  259. raise ZeroDivisionError
  260. except ZeroDivisionError:
  261. f = sys.exc_info()[2].tb_frame.f_back
  262. print_list(extract_stack(f, limit), file)
  263.  
  264. def format_stack(f=None, limit=None):
  265. """Shorthand for 'format_list(extract_stack(f, limit))'."""
  266. if f is None:
  267. try:
  268. raise ZeroDivisionError
  269. except ZeroDivisionError:
  270. f = sys.exc_info()[2].tb_frame.f_back
  271. return format_list(extract_stack(f, limit))
  272.  
  273. def extract_stack(f=None, limit = None):
  274. """Extract the raw traceback from the current stack frame.
  275.  
  276. The return value has the same format as for extract_tb(). The
  277. optional 'f' and 'limit' arguments have the same meaning as for
  278. print_stack(). Each item in the list is a quadruple (filename,
  279. line number, function name, text), and the entries are in order
  280. from oldest to newest stack frame.
  281. """
  282. if f is None:
  283. try:
  284. raise ZeroDivisionError
  285. except ZeroDivisionError:
  286. f = sys.exc_info()[2].tb_frame.f_back
  287. if limit is None:
  288. if hasattr(sys, 'tracebacklimit'):
  289. limit = sys.tracebacklimit
  290. list = []
  291. n = 0
  292. while f is not None and (limit is None or n < limit):
  293. lineno = f.f_lineno
  294. co = f.f_code
  295. filename = co.co_filename
  296. name = co.co_name
  297. linecache.checkcache(filename)
  298. line = linecache.getline(filename, lineno, f.f_globals)
  299. if line: line = line.strip()
  300. else: line = None
  301. list.append((filename, lineno, name, line))
  302. f = f.f_back
  303. n = n+1
  304. list.reverse()
  305. return list
  306.  
  307. def tb_lineno(tb):
  308. """Calculate correct line number of traceback given in tb.
  309.  
  310. Obsolete in 2.3.
  311. """
  312. return tb.tb_lineno

Python 进阶 之 traceback模块的更多相关文章

  1. Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块

    Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: ​ 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...

  2. Python中的traceback模块

    traceback模块被用来跟踪异常返回信息. 如下例所示: 1.直接打印异常信息 import traceback try: raise SyntaxError, "traceback t ...

  3. python进阶之time模块详解

    Time模块 Time模块包含的函数 Time模块包含了一下内置的函数,既有时间处理的,也有转换时间格式的: 序号 函数及描述 1 time.altzone 返回格林威治西部的夏令时地区的偏移秒数.如 ...

  4. Python 进阶 之 socket模块

    Python Socket 编程详细介绍 转载地址:https://gist.github.com/kevinkindom/108ffd675cb9253f8f71?signup=true Pytho ...

  5. Python进阶-XVV hashlib模块、configparse模块、logging模块

    1.配置相关的configparse模块 配置文件如何组织?python中常见的是将配置文件写成py,然后引入该模块即可.优点是方便访问. 但是也有用类似windows中的ini文件的配置文件,了解即 ...

  6. Python进阶-XIII 导入模块和包 异常处理

    一.模块的导入 1).import # 测试一:money与my_module.money不冲突 import my_module money=10 print(my_module.money) '' ...

  7. Python进阶-XI 常用模块之一:collections、time、random、os、sys

    简要介绍一下各种集合: 列表.元组.字典.集合(含frozenset).字符串.堆栈(如手枪弹夹:先进后出).队列(如马克沁机枪的弹夹:先进先出) 1.collections 1)queue 队列介绍 ...

  8. Python traceback模块简单使用

    Python中的traceback模块被用于跟踪异常返回信息,可以在logging中记录下traceback. traceback.format_exc() 获取异常为字符串,保存到日志文件 try: ...

  9. Python入门之logging模块

    本章目录: 一.logging模块简介 二.logging模块的使用 三.通过JSON或者YMAL文件配置logging模块 ===================================== ...

随机推荐

  1. 【linux】亲测成功_CentOS7.2/rhel7.2 忘记root密码及重置root密码的方法?

    本文转自:https://www.jb51.net/article/146320.htm  CentOS 7 root密码的重置方式和CentOS 6完全不一样,以进入单用户模式修改root密码为例. ...

  2. Linux上删除空行的方法

    grep . data.txt grep-v'^$' data.txt grep'[^$]' data.txt sed'/^$/d' data.txt sed'/^\s*$/d' data.txt # ...

  3. shit element ui & form password validation

    shit element ui & form password validation shit docs https://github.com/yiminghe/async-validator ...

  4. [洛谷P2839][国家集训队]middle

    题目大意:给你一个长度为$n$的序列$s$.$Q$个询问,问在$s$中的左端点在$[a,b]$之间,右端点在$[c,d]$之间的子段中,最大的中位数. 强制在线. 题解:区间中位数?二分答案,如果询问 ...

  5. nowcoder 提高组模拟赛 选择题 解题报告

    选择题 链接: https://www.nowcoder.com/acm/contest/178/B 来源:牛客网 题目描述 有一道选择题,有 \(a,b,c,d\) 四个选项. 现在有 \(n\) ...

  6. [学习笔记]对未来做出承诺的DP小结

    这是一种DP状态设计方法. 有些题,当你必须以一个顺序往后填的话,然而后面的填法会对之前产生影响,那么,不妨在之前就对未来怎么填做出承诺. 通俗的讲,就是对未来打一个表. 然后后面填的时候,直接查表转 ...

  7. BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp

    首先这道题让我回忆了一下最短路算法,所以我在此做一个总结: 带权: Floyed:O(n3) SPFA:O(n+m),这是平均复杂度实际上为O(玄学) Dijkstra:O(n+2m),堆优化以后 因 ...

  8. 如何使用Photoshop制作真实的尺子

    前言: 日常生活中经常性的偶尔需要测量一些东西的尺寸,但刚好手头上缺乏尺子等必要的测量工具,这时候其实我们可以利用Photoshop,临时制作一把基于现实物理单位(如:厘米)的虚拟尺子. 难点: 像素 ...

  9. codevs 1078 最小生成树 kruskal

    题目描述 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 约翰已经给他的农场安排了一条高速的网络线路,他想把这 ...

  10. ng父组件调用子组件的方法

    https://www.pocketdigi.com/20170204/1556.html 组件之间方法的调用统一用中间人调用.数据传递直接input和output即可