python如何获取文件的行号_Python当我捕获异常时,如何获取类型,文件和行号?...
捕获一个将按如下方式打印的异常:
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 traceback.format_exc()
print traceback_template % traceback_details
在这个特定的查询答案:
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当我捕获异常时,如何获取类型,文件和行号?...相关推荐
- Python:监控键盘输入、鼠标操作,并将捕获到的信息记录到文件中
Python:监控键盘输入.鼠标操作,并将捕获到的信息记录到文件中 - Socrates的专栏 - 博客频道 - CSDN.NET Python:监控键盘输入.鼠标操作,并将捕获到的信息记录到文件中 ...
- python获取代码当前行数_Python实验室一段日志代码,获取当前调用的函数名和行号...
代码如下: #............. class CrawlerLog(object): def __init__(self, logName=None): #............ self. ...
- python获取文件修改时间 错误_python 封装selenium 出错后,以时间生成文件夹保存错误图片 做梦的人...
背景:在selenium出错后都会截图,那截图的时候都是以当天时间存入到当前时间文件夹中,那这个就可以分成3部,进行封装 一:格式化数据 #encoding=utf-8 import time fro ...
- python idle编辑的代码文件拓展名是_Python IDLE编辑器打开后缀名为.py的文件
原博文 2020-04-08 17:56 − 在Windows操作系统下默认使用Python自带的IDLE编辑器打开后缀名为.py的文件. 1. win+R打开运行 2. 输入regedit,确定 3 ...
- python爬取微博数据存入数据库_Python爬取新浪微博评论数据,写入csv文件中
因为新浪微博网页版爬虫比较困难,故采取用手机网页端爬取的方式 操作步骤如下: 1. 网页版登陆新浪微博 2.打开m.weibo.cn 3.查找自己感兴趣的话题,获取对应的数据接口链接 4.获取cook ...
- python爬取链家租房信息_python爬取链家租房之获取房屋的链接和页面的详细信息...
因为期末考试的缘故,本打算一个星期结束的爬虫,拖了很久,不过,也有好处:之前写的时候总是被反爬,这几天复习之余写了些反爬取的py code 下面发出来和大家探讨 做了些反爬取的手段 随机获取一个hea ...
- python里两个等号代表什么_Python 到底是强类型语言,还是弱类型语言?
以下文章来源于 Python 猫 ,作者豌豆花下猫 作者 | 豌豆花下猫 来源 | Python 猫 前言 我在上一篇文章中分析了为什么 Python 没有 void 类型的话题,在文章发布后,有读者 ...
- 怎么理解python语言是一种强类型语言_Python 到底是强类型语言,还是弱类型语言?...
0.前言 我在上一篇文章中分析了 为什么 Python 没有 void 类型 的话题,在文章发布后,有读者跟我讨论起了另一个关于类型的问题,但是,我们很快就出现了重大分歧. 我们主要的分歧就在于:Py ...
- python调用函数获取最开始的异常_Python使用sys.exc_info()方法获取异常信息
在实际调试程序的过程中,有时只获得异常的类型是远远不够的,还需要借助更详细的异常信息才能解决问题. 捕获异常时,有 2 种方式可获得更多的异常信息,分别是: 使用 sys 模块中的 exc_info ...
最新文章
- centos 学习日记 文件默认权限:umaks
- JAV实现跳台阶问题(《剑指offer》)
- Arcgis for JS扩展GraphicLayer实现区域对象的聚类统计与展示
- win10 uwp 使用 Matrix3DProjection 进行 3d 投影
- TCP/IP协议的TCP握手协议
- HUE 提交Schedule 时区问题
- 苹果Mac时间日程管理工具:Things 备注支持 Markdown
- Python使用numpy模块实现矩阵和列表的连接操作
- 谈谈以前那位研发总监的工作
- oracle退税率后台表,Oracle ERP表信息整理(AP).doc
- SFML1 俄罗斯方块代码解析
- 计算机组成原理课程要求及目的,《计算机组成原理》课程教学大纲
- 如何使用计算机对文件修改密码,文件夹怎么设置密码?怎么给文件夹设置密码?...
- mysql数据库的超级管理员名称_MySQL数据库的超级管理员用户的名称是__________。...
- 【分析】Ceph数据一致性检查 - Scrub的执行
- 开启子进程的两种方式,孤儿进程与僵尸进程,守护进程,互斥锁,IPC机制,生产者与消费者模型...
- Python入门实例——测试代码
- BZOJ4605:崂山白花蛇草水
- 阿里巴巴python招聘_python阿里巴巴招聘网站爬虫
- [蓝桥杯][2018年第九届真题]日志统计(尺取法)
热门文章
- 大数据技术周报第 004 期
- Asp.net ajax、Anthem.net、Ajax pro三大ajax框架论坛网友比较
- [机器学习-原理篇]支持向量机(SVM)深入理解
- 网络爬虫抓包使用及通过表单请求
- 求素数算法(C语言)
- python用符号计算检验多维数组的计算
- python获取网页源码被拒绝_Python3 请求网页源码 目标计算机积极拒绝,无法连接...
- Java中的变量分类_开发简单的Java应用
- ios13 无法传参_iOS13个人热点功能频遭投诉
- java控制面板作用_大师为你分析win7系统打开java控制面板的方法