python 异常回溯_关于python:在循环中捕获异常回溯,然后在脚本末尾引发错误...

我正在尝试捕获所有异常错误,然后在脚本结尾处使其引发/显示所有回溯...

我有一个主脚本,例如调用我的下标:

errors = open('MISC/ERROR(S).txt', 'a')

try:

execfile("SUBSCRIPTS/Test1.py", {})

except Exception:

## Spread over two calls of errors.write for readability in code...

errors.write(strftime('%d/%m/%Y %H:%M:%S') +"

")

errors.write(traceback.format_exc() + '

')

try:

execfile("SUBSCRIPTS/Test2.py", {})

except Exception:

## Spread over two calls of errors.write for readability in code...

errors.write(strftime('%d/%m/%Y %H:%M:%S') +"

")

errors.write(traceback.format_exc() + '

')

errors.close()

此脚本使用追溯模块从脚本中检索错误...

在下一个示例中,这是我当前脚本的样子:

for x in y:

if"example" in x:

for tweet in tweetlist:

# Try

try:

twitter.update_status(status=tweet)

# Do some other stuff here if it suceeeds like...

print"oo example worked"

# Damn it failed, grab the whole traceback?

except Exception as reason:

FailedTweet = True

# Do some other stuff here like...

print"I did other stuff"

if FailedTweet:

print reason # Printing the reason because I don't know how to throw the exception error (full error)

基本上,存在一个大循环,可能会在此行中出现错误:twitter.update_status(status=tweet),如果确实如此,我希望它能够捕获回溯错误,因为它在一个循环中,然后在脚本完成时,它可能不止一个 我希望它将所有回溯错误发送回主脚本,以便将其全部写入错误文件。

从代码的第一位向文件写入错误的示例:

# 17/08/2014 12:30:00

# Traceback (most recent call last):

#   File"C:\Main.py", line 117, in execute_subscripts

#     execfile("SUBSCRIPTS/Test1.py", {})

#   File"SUBSCRIPTS/Test1.py", line 440, in

#     twitter.update_status(status=string)

#   File"C:\Python27\lib\site-packages\twython\endpoints.py", line 90, in update_status

#     return self.post('statuses/update', params=params)

#   File"C:\Python27\lib\site-packages\twython\api.py", line 234, in post

#     return self.request(endpoint, 'POST', params=params, version=version)

#   File"C:\Python27\lib\site-packages\twython\api.py", line 224, in request

#     content = self._request(url, method=method, params=params, api_call=url)

#   File"C:\Python27\lib\site-packages\twython\api.py", line 194, in _request

#     retry_after=response.headers.get('retry-after'))

# TwythonError: Twitter API returned a 403 (Forbidden), This request looks like it might be automated. To protect our users from spam and other malicious activity, we can't complete this action right now. Please try again later.

我将如何实现这一点,这很难解释,所以如果有什么不对的地方,请询问。

只需将回溯数据保存在列表中,然后在循环完成后打印列表的内容。

import traceback

reasons = []

for x in y:

if"example" in x:

for tweet in tweetlist:

# Try

try:

twitter.update_status(status=tweet)

# Do some other stuff here if it suceeeds like...

print"oo example worked"

# Damn it failed, grab the whole traceback?

except Exception:

reasons.append(traceback.format_exc())

# Do some other stuff here like...

print"I did other stuff"

for reason in reasons:

print reason

# If you want to raise a single exception that shows the traceback for

# each exception, you can do this:

class ChainedException(Exception):

def __init__(self, msg):

msg ="The following exceptions occurred:

{}".format(msg)

if reasons:

raise ChainedException('

'.join(reasons))

ChainedException的示例用法:

reasons = []

for i in range(5):

try:

raise Exception("Blah {}".format(i))

except Exception:

reasons.append(traceback.format_exc())

if reasons:

raise ChainedException("

".join(reasons))

输出:

Traceback (most recent call last):

File"ok.py", line 17, in

raise ChainedException("

".join(reasons))

__main__.ChainedException: The following exceptions occurred:

Traceback (most recent call last):

File"ok.py", line 12, in

raise Exception("Blah {}".format(i))

Exception: Blah 0

Traceback (most recent call last):

File"ok.py", line 12, in

raise Exception("Blah {}".format(i))

Exception: Blah 1

Traceback (most recent call last):

File"ok.py", line 12, in

raise Exception("Blah {}".format(i))

Exception: Blah 2

Traceback (most recent call last):

File"ok.py", line 12, in

raise Exception("Blah {}".format(i))

Exception: Blah 3

Traceback (most recent call last):

File"ok.py", line 12, in

raise Exception("Blah {}".format(i))

Exception: Blah 4

编辑:

如果您真的只在乎从整个例外列表中提出一个例外,则可以这样做:

import traceback

reason = None

for x in y:

if"example" in x:

for tweet in tweetlist:

# Try

try:

twitter.update_status(status=tweet)

# Do some other stuff here if it suceeeds like...

print"oo example worked"

# Damn it failed, grab the whole traceback?

except Exception:

reason = sys.exc_info() # We're not putting it in a list because you only care about one.

# Do some other stuff here like...

print"I did other stuff"

if reason:

raise reason[0], reason[1], reason[2]

请注意,这仅适用于Python2.x。 如果您使用的是Python 3.x,则需要使用以下代码:

if reason:

raise reason[1].with_traceback(reason[2])

嗯,很好的逻辑。然后如何创建异常,以便主脚本意识到存在错误/将错误记录到文件中?

您实际上想看到什么记录?只是一个或多个异常发生的通知,还是所有回溯?您只能对父脚本提出一个例外,那应该是什么?发生的实际异常之一,还是指示一个或多个状态更新失败的一般性异常?

@Ryflex Ive更新了我的答案,以显示我认为您正在寻找的东西。

恩,我只是再次浏览了twitter API;即错误代码,并且当代码通过for循环时,我不会收到不同的错误代码,因此在这种情况下,只抛出一个完整的完整回溯traceback.format_exc()效果会更好,如我的原始文章所示。 ;我只是不知道如何将回溯发送回主脚本...在将原因设置如下后,我会做raise reason吗?

香港专业教育学院搜索系统文档,但我找不到任何有关exc_info()的每个部分做什么...

@Ryflex如果没有在堆栈上的任何地方处理异常,则返回包含三个None值的元组。否则,返回的值为(类型,值,回溯)。它们的含义是:type获取正在处理的异常的异常类型(一个类对象); value获取异常参数(其关联值或要引发的第二个参数,如果异常类型是类对象,则始终为类实例); traceback获取一个traceback对象(请参见参考手册),该对象在最初发生异常的位置封装了调用堆栈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java web开发常见问题_JavaWeb学习笔记(五)--Web开发其他常见问题

一、把web应用打成war包使用JDK自带jar命令,进入到web应用里面,执行命令:jar -cvf 包名.war . # .表示当前目录所有的文件 直接用jar可查看帮助执行完成后生成一个demo.war文件,把这个文件拷贝到Tomcat的webapps下,Tom…

mysql having in_MySQL中无GROUPBY直接HAVING的问题

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/having_without_groupby_in_mysql.html 今天有同学给我反应,有一张表,id是主键,这样的写法可…

python求线段长度_python微元法计算函数曲线长度的方法

计算曲线长度,根据线积分公式:,令积分函数f(x,y,z) 为1,即计算曲线的长度,将其微元化:其中根据此时便可在python编程实现,给出4个例子,代码中已有详细注释,不再赘述计算曲…

java if 顺序 括号_03-03 java 顺序语句结构,选择结构if语句

/*if语句的格式3:if(比较表达式1) {语句体1;}else if(比较表达式2) {语句体2;}else if(比较表达式3) {语句体3;}...else {语句体n1;}执行流程:首先计算比较表达式1看其返回值是true还是false,如果是true,就执行语句体1&#xff0c…

java 项目部署_java项目部署

本文章只为帮助大家学习项目的发布,为基础篇,在此给大家示范在window环境下的项目部署及运维。以下版本为讲解示例,可自行改至匹配版本。服务器:window service2008 R2 Standard(提前准备好服务器,可以在服务器商家租服…

电气专业学python吗_985大学毕业起薪最高的五个专业,计算机、金融、电气上榜!...

本科毕业生起薪是指本科毕业生第一份工作能够获得的薪资水平,大学毕业生的起薪一般会因为学校、专业、地区的不同而有所差异。一般来说,985大学毕业生的起薪要比普通大学毕业生的起薪高一点,那么,985大学中,哪些专业的…

python核心教程_python核心教程--第四章

第四章讲的是python对象。4.1 python对象所有的python对象都拥有三个特性:身份,类型和值身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。类型&#…

uwsgi怎么通过浏览器访问某个脚本_4个Shell小技巧帮你提高机器学习效率:写好脚本,事半功倍...

晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI在机器学习的实践过程中,用好Shell能帮你很多节省时间。最近,有位来自ETHZ的学生分享了一些Shell小技巧。对程序员来说,这些技巧更重要的是让你的思维从琐碎小事中解脱出来,大大提高…

java file 字符串_Java读取一个文本文件拼接成一个字符串(readFileToString)

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import org.junit.Test;public class Demo {// 使用示例Testpublic void testName1() throws Exception {String filePath …

pythonselenium上传图片视频_如何用selenium、python上传文件(图片)

我添加了一个答案,任何人想使用处理恼人的msofiledialogs。这是对saravanan提出的解决方案的改进,但对Python来说更加充实。我也遇到过类似的问题,我正在为一家公司做脚本。我试图为一家公司的客户上传文件,但由于他们的网站工作方…

java中的.运算符_java中的各种运算符

1、算术运算符;算术运算符也就是我们小学所学过的: - */;还有取模运算符:%;取模运算符也就是求余的运算;运算形式:操作数 操作数;操作数 - 操作数;操作数 *操作数&#…

python curl 获取返回值_python获取系统命令的返回值 | curl in python

项目背景:通过curl 命令 从服务器获取数组,tids,然后导入到Mysql 表中。自己想的方案:shell命令不熟悉,另外python中的数据库等接口都已封装,所以想使用Python来做,利用Python调用shell命令。cu…

java 绑定属性_Java的动态绑定

看这段代码Father father new Son();父类引用指向子类对象,这是java的多态特性,有多态引到动态绑定,如何引入呢,看这个代码:classFather{privateString nameString;public voidspeak() {System.out.println(this.getC…

中软python编码规范考试试题_卓越分享 | 如何写出一手漂亮的Python代码?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Python语言这么火,有很多同学是从其他语言转行过来的(比如c,java语言),多多少少写代码的时候也会受其他语言的影响!而对于刚开始学编程的小白同学来说,解决问题的思路有的…

间接寻址级别不同_被遗忘的利息税,国债与存款的利率区别,同大额存单的4点大不同...

2020年6月10日的储蓄式电子国债发行又一次与理财人擦肩而过,因为疫情管控原因,此次暂时不发行,那么下一个认购国债的窗口,就是7月10日,仍然是储蓄式电子国债,期限还是3年期和5年期两种。那么能如期发行吗&a…

java宠物健康值_宠物健康微手册:成年篇

在健康微手册幼年篇之后,成年篇也出炉了。这里所说的成年,也就是从1岁起,到大型犬的6岁左右,或者小型犬或猫猫的10岁左右。老年宠物的注意事项就留到下次再讲吧。身体检查:每年一到两次的身体检查很重要。小宠物不能告…

python定义数列每项的变量__Python定义方法

def 定义一个方法在项目编程中,我们往往要做很多重复的事,比如一个排序的功能(当然Python中内置排序的方法),在编程中,我们肯定是会多次用到这个功能的,如果我们每次都在要用这个功能时,都去写一遍&#xf…

java 变参 使用数组调用_java中的可变参数使用方法

java中的可变参数使用方法可变参数时Java 1.5新增的方法,可变参数方法接收0个或者多个指定类型的参数,可变参数机制通过先创建一个数组,数组的大小为在调用位置所传递的参数数量,然后将参数值传到数组中,最后将数组传递…

python课程水平测试成绩查询_学业水平考试成绩查询系统入口

学业水平测试是对高中生在校期间学习情况的全面检测。学业水平测试、语数外科目考试、综合素质评价,共同构成完整的高中学生综合评价体系。学业水平考试成绩如何查询1、网站查询:通过百度或输入网址,进入学业水平测试成绩查询的官网&#xff…

lamp配置python_LAMP搭建笔记

LAMP简介LAMP指的Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母。LAMP便成了一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为…