捕获一个将按如下方式打印的异常:

Traceback (most recent call last):

File"c:/tmp.py", line 1, in

4 / 0

ZeroDivisionError: integer division or modulo by zero

我想把它格式化为:

ZeroDivisonError, tmp.py, 1

使用内置的回溯模块。

如果出现异常,打印代码行也会有所帮助:请参阅stackoverflow.com/questions/14519177/…

import sys, os

try:

raise NotImplementedError("No error")

except Exception as e:

exc_type, exc_obj, exc_tb = sys.exc_info()

fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]

print(exc_type, fname, exc_tb.tb_lineno)

您应该小心地将sys.exc_info()解包到局部变量中,因为如果在except处理程序中得到异常,则局部变量可以保存在循环引用中,而不是gc'd中。最佳做法是始终只使用sys.exc_info()的切片。或者像其他海报建议的那样使用其他模块,比如回溯。

肺结核只是不包括肺结核吗?和os.path.split(blabla)[1]是os.path.basename(balbalbal)

这条线安全吗?

用这个代码,我得到(当try: 1/0时):integer division or modulo by zero。如何让ZeroDivisionError: integer division or modulo by zero代替?

@basj:使用sys.exc_info()[0]。uu name_uuu,您可以得到类型的简单名称。

@DanielPryden python文档也使用相同的解包方法docs.python.org/2/library/traceback.html回溯示例

我正在从另一个文件导入类,使用此解决方案时,错误指向当前文件中调用该类函数的行。实际错误发生在类文件中,但此解决方案仅显示当前文件中的错误。有没有办法挖得更深?

@罗布:是的,它是安全的。为了解决以前API中的线程安全问题,引入了sys.exc_info()。它的输出特定于当前线程和当前堆栈帧。

如果使用日志库,则使用logging.exception(e)

这是一个很好的演示,演示了为什么在Python中所有简单的事情都比较困难……

simplest形式,为我工作。

import traceback

try:

print(4/0)

except ZeroDivisionError:

print(traceback.format_exc())

输出

Traceback (most recent call last):

File"/path/to/file.py", line 51, in

print(4/0)

ZeroDivisionError: division by zero

Process finished with exit code 0

虽然这不完全是OP想要的格式,但这是最简单、最可靠的解决方案。

它的强大之处是什么?

这正是我想要的。""稳健"。

源(Py v2.7.3)traceback.format _例外(所谓的)和/ helps greatly相关函数。embarrassingly,总是忘记读《源代码。在我对这只母狗在搜索类似徒劳的细节。一个简单的问题,"如何recreate相同的输出作为Python例外的情况一样,与所有的细节。"这会让任何人90 +百分之二,不管他们的寻找。时滞,和这是IP的实例。希望它helps他人。(它的酸性帮我!;-)

import sys, traceback

traceback_template = '''Traceback (most recent call last):

File"%(filename)s", line %(lineno)s, in %(name)s

%(type)s: %(message)s

''' # Skipping the"actual line" item

# Also note: we don't walk all the way through the frame stack in this example

# see hg.python.org/cpython/file/8dffb76faacc/Lib/traceback.py#l280

# (Imagine if the 1/0, below, were replaced by a call to test() which did 1/0.)

try:

1/0

except:

# http://docs.python.org/2/library/sys.html#sys.exc_info

exc_type, exc_value, exc_traceback = sys.exc_info() # most recent (if any) by default

'''

Reason this _can_ be bad: If an (unhandled) exception happens AFTER this,

or if we do not delete the labels on (not much) older versions of Py, the

reference we created can linger.

traceback.format_exc/print_exc do this very thing, BUT note this creates a

temp scope within the function.

'''

traceback_details = {

'filename': exc_traceback.tb_frame.f_code.co_filename,

'lineno'  : exc_traceback.tb_lineno,

'name'    : exc_traceback.tb_frame.f_code.co_name,

'type'    : exc_type.__name__,

'message' : exc_value.message, # or see traceback._some_str()

}

del(exc_type, exc_value, exc_traceback) # So we don't leave our local labels/objects dangling

# This still isn't"completely safe", though!

#"Best (recommended) practice: replace all exc_type, exc_value, exc_traceback

# with sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]

print

print traceback.format_exc()

print

print traceback_template % traceback_details

print

在这个特定的查询答案:

sys.exc_info()[0].__name__, os.path.basename(sys.exc_info()[2].tb_frame.f_code.co_filename), sys.exc_info()[2].tb_lineno

PY3改'message' : exc_value.message为'message' : str(exc_value)。

这里是一个example of the Line number of表现例外在需要的地方。

import sys

try:

print(5/0)

except Exception as e:

print('Error on line {}'.format(sys.exc_info()[-1].tb_lineno), type(e).__name__, e)

print('And the rest of program continues')

python如何获取文件的行号_Python当我捕获异常时,如何获取类型,文件和行号?...相关推荐

  1. Python:监控键盘输入、鼠标操作,并将捕获到的信息记录到文件中

    Python:监控键盘输入.鼠标操作,并将捕获到的信息记录到文件中 - Socrates的专栏 - 博客频道 - CSDN.NET Python:监控键盘输入.鼠标操作,并将捕获到的信息记录到文件中 ...

  2. python获取代码当前行数_Python实验室一段日志代码,获取当前调用的函数名和行号...

    代码如下: #............. class CrawlerLog(object): def __init__(self, logName=None): #............ self. ...

  3. python获取文件修改时间 错误_python 封装selenium 出错后,以时间生成文件夹保存错误图片 做梦的人...

    背景:在selenium出错后都会截图,那截图的时候都是以当天时间存入到当前时间文件夹中,那这个就可以分成3部,进行封装 一:格式化数据 #encoding=utf-8 import time fro ...

  4. python idle编辑的代码文件拓展名是_Python IDLE编辑器打开后缀名为.py的文件

    原博文 2020-04-08 17:56 − 在Windows操作系统下默认使用Python自带的IDLE编辑器打开后缀名为.py的文件. 1. win+R打开运行 2. 输入regedit,确定 3 ...

  5. python爬取微博数据存入数据库_Python爬取新浪微博评论数据,写入csv文件中

    因为新浪微博网页版爬虫比较困难,故采取用手机网页端爬取的方式 操作步骤如下: 1. 网页版登陆新浪微博 2.打开m.weibo.cn 3.查找自己感兴趣的话题,获取对应的数据接口链接 4.获取cook ...

  6. python爬取链家租房信息_python爬取链家租房之获取房屋的链接和页面的详细信息...

    因为期末考试的缘故,本打算一个星期结束的爬虫,拖了很久,不过,也有好处:之前写的时候总是被反爬,这几天复习之余写了些反爬取的py code 下面发出来和大家探讨 做了些反爬取的手段 随机获取一个hea ...

  7. python里两个等号代表什么_Python 到底是强类型语言,还是弱类型语言?

    以下文章来源于 Python 猫 ,作者豌豆花下猫 作者 | 豌豆花下猫 来源 | Python 猫 前言 我在上一篇文章中分析了为什么 Python 没有 void 类型的话题,在文章发布后,有读者 ...

  8. 怎么理解python语言是一种强类型语言_Python 到底是强类型语言,还是弱类型语言?...

    0.前言 我在上一篇文章中分析了 为什么 Python 没有 void 类型 的话题,在文章发布后,有读者跟我讨论起了另一个关于类型的问题,但是,我们很快就出现了重大分歧. 我们主要的分歧就在于:Py ...

  9. python调用函数获取最开始的异常_Python使用sys.exc_info()方法获取异常信息

    在实际调试程序的过程中,有时只获得异常的类型是远远不够的,还需要借助更详细的异常信息才能解决问题. 捕获异常时,有 2 种方式可获得更多的异常信息,分别是: 使用 sys 模块中的 exc_info ...

最新文章

  1. centos 学习日记 文件默认权限:umaks
  2. JAV实现跳台阶问题(《剑指offer》)
  3. Arcgis for JS扩展GraphicLayer实现区域对象的聚类统计与展示
  4. win10 uwp 使用 Matrix3DProjection 进行 3d 投影
  5. TCP/IP协议的TCP握手协议
  6. HUE 提交Schedule 时区问题
  7. 苹果Mac时间日程管理工具:Things 备注支持 Markdown
  8. Python使用numpy模块实现矩阵和列表的连接操作
  9. 谈谈以前那位研发总监的工作
  10. oracle退税率后台表,Oracle ERP表信息整理(AP).doc
  11. SFML1 俄罗斯方块代码解析
  12. 计算机组成原理课程要求及目的,《计算机组成原理》课程教学大纲
  13. 如何使用计算机对文件修改密码,文件夹怎么设置密码?怎么给文件夹设置密码?...
  14. mysql数据库的超级管理员名称_MySQL数据库的超级管理员用户的名称是__________。...
  15. 【分析】Ceph数据一致性检查 - Scrub的执行
  16. 开启子进程的两种方式,孤儿进程与僵尸进程,守护进程,互斥锁,IPC机制,生产者与消费者模型...
  17. Python入门实例——测试代码
  18. BZOJ4605:崂山白花蛇草水
  19. 阿里巴巴python招聘_python阿里巴巴招聘网站爬虫
  20. [蓝桥杯][2018年第九届真题]日志统计(尺取法)

热门文章

  1. 大数据技术周报第 004 期
  2. Asp.net ajax、Anthem.net、Ajax pro三大ajax框架论坛网友比较
  3. [机器学习-原理篇]支持向量机(SVM)深入理解
  4. 网络爬虫抓包使用及通过表单请求
  5. 求素数算法(C语言)
  6. python用符号计算检验多维数组的计算
  7. python获取网页源码被拒绝_Python3 请求网页源码 目标计算机积极拒绝,无法连接...
  8. Java中的变量分类_开发简单的Java应用
  9. ios13 无法传参_iOS13个人热点功能频遭投诉
  10. java控制面板作用_大师为你分析win7系统打开java控制面板的方法