如果我有那个代码:

try:

some_method()

except Exception, e:

如何获得此Exception值(字符串

代表我的意思)?

使用str

try:

some_method()

except Exception as e:

s = str(e)

此外,大多数异常类都具有args属性。通常,args[0]将是错误消息。

应该注意的是,如果没有错误消息,只使用str将返回空字符串,而使用repr作为pyfunc建议将至少显示异常的类。我的看法是,如果你打印出来的话,最终用户并不关心这个类是什么,只是想要一个错误信息。

它实际上取决于您正在处理的异常类以及它是如何实例化的。你有什么特别的想法吗?

我打印这个报告,str(e)我觉得很好。非常感谢

我更喜欢使用e.message因为args[0]可能实际上不是消息。

如果你想获得完整的异常(例如NameError("未定义"全局名称'变量'),而不是"未定义全局名称'变量'),repr(e)也很有用"

这个答案很危险,因为像这样的unicode异常会失败:raise Exception(u'jörn')。失败尤其糟糕,因为你永远不会看到实际的异常而只是UnicodeDecodeError。如果您不知道异常的编码(大多数情况下您不知道),您应该使用repr(e)或者如果您确实需要,在异常处理中使用另一个try-except块来捕获UnicodeDecodeErrors和回到repr(e)。

同意@ Jö rnHees。我无法计算str(或甚至unicode或.format)因Unicode处理而导致错误的次数。如果您无法完全控制错误消息内容,请始终使用repr以避免意外的Unicode错误。

就我而言,e.read()给出了str(e)没有的错误信息。知道为什么@aaronasterling?

Use repr() and The difference between using repr and str

使用repr:

>>> try:

...     print x

... except Exception, e:

...     print repr(e)

...

NameError("name 'x' is not defined",)

>>>

使用str:

>>>

>>> try:

...     print x

... except Exception, e:

...     print str(e)

...

name 'x' is not defined

>>>

>>>

很棒的建议!不知道异常的区别。

我建议对未定义的'e'和异常'e'使用不同的字母,以避免让人混淆

啊,repr非常有用,谢谢,似乎其他任何东西unicode,str,编码,...可能会根据输入引发异常。在尝试保持异常时看起来不太有用,但看起来repr exception-safe

这比任何类似str()的解决方案要好得多,因为它实际上包含了异常类型。随着str()我得到'status'而repr()我得到KeyError('status')我就像"aaaaah,现在我理解错误"。

即使我意识到这是一个老问题,我还是建议使用traceback模块来处理异常的输出。

使用traceback.print_exc()将当前异常打印到标准错误,就像它在未被捕获时打印一样,或者traceback.format_exc()以获得与字符串相同的输出。如果要限制输出,可以将各种参数传递给其中任何一个函数,或者将打印重定向到类文件对象。

另一种方式还没有给出:

try:

1/0

except Exception, e:

print e.message

输出:

integer division or modulo by zero

args[0]实际上可能不是消息。

str(e)可能会返回带有引号的字符串,如果是unicode,则可能返回前导u:

'integer division or modulo by zero'

repr(e)给出完整的异常表示,这可能不是您想要的:

"ZeroDivisionError('integer division or modulo by zero',)"

编辑

我的错 !!!似乎BaseException.message已经从2.6弃用了,最后,似乎仍然没有标准化的方式来显示异常消息。所以我想最好的办法是根据你的需要处理e.args和str(e)(如果你使用的lib依赖于那个机制,可能会e.message)。

例如,使用pygraphviz,e.message是正确显示异常的唯一方法,使用str(e)将使用u''包围消息。

但是使用MySQLdb,检索消息的正确方法是e.args[1]:e.message为空,str(e)将显示'(ERR_CODE,"ERR_MSG")'

如果您不知道错误的类型/来源,可以尝试:

import sys

try:

doSomethingWrongHere()

except:

print('Error: {}'.format(sys.exc_info()[0]))

但要注意,你会得到pep8警告:

[W] PEP 8 (E722): do not use bare except

对于python2,最好使用e.message来获取异常消息,这样可以避免可能的UnicodeDecodeError。但是对于像OSError这样的异常,是e.message将为空,在这种情况下,我们可以在记录功能中添加exc_info=True,以免错过错误。

对于python3,我认为使用str(e)是安全的。

python中去除异常值_在Python中获取异常值相关推荐

  1. python 打印数组变量_使用Python将数组的元素导出到变量中(unpacking)

    下面就为大家分享一篇使用Python将数组的元素导出到变量中(unpacking),具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 最近工作中遇到一个问题,需要利用Python将数组(list ...

  2. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  3. python字符串去掉空行_从python中的字符串中删除空格

    python字符串去掉空行 如何在python中删除字符串中的空格 (How to remove whitespaces in a string in python) str.lstrip()str. ...

  4. python删除字符串中重复字符_删除字符串中重复字符python 用CAD怎么画DNA反向

    用CAD怎么画DNA反向平行双螺旋结构绘螺旋线时,用选扭曲,确定顺时针. 画双头螺旋线时,第二根螺旋线底圆起点与第一根螺旋线底圆起点,可用角度分隔如180°.python去除文本中重复的字符串可有可无 ...

  5. python字符串拼接数字_解决Python中字符串和数字拼接报错的方法

    解决Python中字符串和数字拼接报错的方法 前言 众所周知Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换类型,如果直接将字符串和数字拼接会直接报错. 如以下的代码: # co ...

  6. python如何隐藏密码_在python脚本中隐藏密码(仅限不安全的混淆)

    Base64编码是在标准库中,并将停止肩膀冲浪者: >>> import base64 >>> print base64.b64encode("passw ...

  7. python中计算带分数_聊聊 python 数据处理全家桶(Redis篇)

    作者:星安果 来源:AirPython 前面两篇文章聊到了 python 处理 Mysql.Sqlite 数据库常用方式,本篇文章继续说另外一种比较常用的数据存储方式:Redis Redis:Remo ...

  8. python怎么更新数据库_在Python的Django框架中更新数据库数据的方法

    先使用一些关键参数创建对象实例,如下: >>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... ...

  9. python在材料模拟中的应用_基于Python的ABAQUS二次开发及在板料快速冲压成形模拟中的应用...

    2009 doi :10 1 3969/ j 1 issn 1 1007 2 2012 1 2009 1 04 1 013 基于 Python 的 ABAQUS 二次开发及在板料快速 冲压成形模拟中的 ...

  10. python整数转换字符串_使用Python中的str()函数将整数值转换为字符串

    python整数转换字符串 Given an integer value and we have to convert the value to the string using str() func ...

最新文章

  1. php 类的数组对象,javascript、php数组对象互转类
  2. python画图如何调整图例位置_matplotlib中legend位置调整解析
  3. oracle跨库插入数据,Oracle跨数据库查询并插入实现原理及代码
  4. Nature封面:大团队日趋中庸,小团队更容易出颠覆性创新
  5. Card Game Again CodeForces - 818E (双指针)
  6. iOS 移动端生成工具开发
  7. ecipse theme
  8. Mint-UI组件 MessageBox为prompt 添加判断条件
  9. 微服务自动化部署(ansible playbook)干货之--zookeeper部署
  10. VB6 GDI+ 入门教程[7] Graphics 其他内容
  11. cortex系列处理器排行_vivoX60系列即将首发5nm Exynos 1080芯片
  12. android之LitePal 3.0 的基本使用
  13. 乐鑫esp8266学习rtos3.0笔记第10篇:内置仅1M的Esp8285,如何攻破最棘手的OTA问题,大大节省资源成本开发产品;
  14. 鹰式价差matlab,期权的价差(2):比例价差、圣诞树型价差
  15. 智能手机基于众包的室内定位
  16. 你这一生其实只有9年
  17. 想要成为黄金分析师要具备哪些知识?
  18. 写给编程初学者的一篇文章,该如何学习编程?我的编程学习之路
  19. Golden Gate
  20. 删除Windows服务

热门文章

  1. python数字类型及运算_Python基础教程:运算符以及数据类型解析
  2. 开课吧9.9元学python靠谱吗-开课吧的Python课程怎么样?大概是多少钱?讲师是廖雪峰吗?...
  3. python自动化测试-基于 Python 的接口自动化测试实例
  4. 自学python编程笔记本推荐-这件神器,每个 Python入门学习者都值得一试
  5. python怎么读文件-python怎么读json文件
  6. python工资高还是java-Python工资高还是Java工资高?Python和Java学哪个?
  7. python有趣的代码-有趣的一行 Python 代码
  8. 会聊天到底有多重要?汽车语音识别大盘点
  9. 手机sstv解码软件_关于二维码扫描使用专业扫描设备和手机二维码扫描软件的区别?...
  10. 沾化区php学校,推进校地合作 助力产教融合:滨州市技术学院与沾化经济开发区举行签约仪式...