python无输出错误_关于错误处理:如何在python中输出异常?

try:

something here

except:

print 'the whatever error occurred.'

如何在我的except:块中打印错误/异常?

我建议更改标题:您没有打印错误,您正在打印异常。它们是不同的。

相关:如何在不停止程序的情况下打印完整的回溯?

对于python 2.6及更高版本和python 3.x:

except Exception as e: print(e)

对于python 2.5及更早版本,请使用:

except Exception,e: print str(e)

str()部分是多余的--print e与print str(e)完全相同[即print自己做串接]]。

@亚历克斯:这不是取决于抛出的异常的子类(如果有的话)吗?repr方法可能尚未实现,而str可能已经实现。在任何情况下,我想没有一个好的替代品可以替代不完整的实现;-)

在python3的fwiw需要像其他答案一样使用EDOCX1[4]

str( KeyError('bad'))=>'bad'--不告诉异常类型

我只是想说,type(e)不是所以如果你想在e中检查一个字符串,你不能只检查"str" in e,你必须检查"str" in str(e),至少对于python 2.7

对于任何对这篇老文章感兴趣的人来说,这对于Python3.6仍然有效。

在keyerrors上的print(e)似乎只给出了密钥,但没有给出完整的异常消息,这并没有什么帮助。

traceback模块提供格式化和打印异常及其回溯的方法,例如,这将像默认处理程序那样打印异常:

import traceback

try:

1/0

except Exception:

traceback.print_exc()

输出:

Traceback (most recent call last):

File"C:\scripts\divide_by_zero.py", line 4, in

1/0

ZeroDivisionError: division by zero

当我使用自己的打印程序添加其他内容时,是否有某种"获取错误"消息调用可以通过"查看"进行打印?

@米凯舍姆·埃多克斯(Mikeshem EDOCX1)(12)

谢谢,这是我想要的。整个跟踪,而不仅仅是错误类型和消息

在python 2.6或更高版本中,它有点干净:

except Exception as e: print(e)

在旧版本中,它仍然非常可读:

except Exception, e: print e

在python3中,必须使用第一种方式,并使用"as"。

如果您想传递错误字符串,下面是一个来自错误和异常的示例(python 2.6)

>>> try:

...    raise Exception('spam', 'eggs')

... except Exception as inst:

...    print type(inst)     # the exception instance

...    print inst.args      # arguments stored in .args

...    print inst           # __str__ allows args to printed directly

...    x, y = inst          # __getitem__ allows args to be unpacked directly

...    print 'x =', x

...    print 'y =', y

...

('spam', 'eggs')

('spam', 'eggs')

x = spam

y = eggs

非常完整,尽管在python2.6之前"as"不起作用

(我本来打算留下这句话作为对@jldupont答案的评论,但我没有足够的声誉。)

我在其他地方也看到过类似@jldupont的答案。fwiw,我认为重要的是要注意:

except Exception as e:

print(e)

默认情况下将错误输出打印到sys.stdout。一般来说,错误处理的更合适方法是:

except Exception as e:

print(e, file=sys.stderr)

(请注意,您必须使用import sys才能实现这一点。)这样,错误将打印到STDERR而不是STDOUT上,这样可以进行正确的输出分析/重定向等。我明白,问题的关键是"打印错误",但在这里指出最佳做法似乎很重要,而不是忽略此数据。对于那些最终学得不好的人来说,这可能导致非标准代码的出现。

我还没有像cat plus的答案那样使用traceback模块,也许这是最好的方法,但我想我会把它扔掉。

这个应该得到更多的赞成票

我建议进一步添加flush=true。我注意到SystemD(并且没有使用适当的日志框架),当捕获到日志时缓冲并不是我所期望的。

如果您想这样做,可以使用断言语句来执行一个线性错误引发。这将帮助您编写静态的可修复代码并尽早检查错误。

assert type(A) is type(""),"requires a string"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值