python中去除异常值_在Python中获取异常值

如果我有那个代码:

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)是安全的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据预处理是数据分析非常重要的一个环节,它可以让原始数据更加适合用于各种分析和建模任务。常见的数据预处理包括数据清洗、缺失值处理、异常值处理、特征选择、特征缩放和特征变换等。下面我们将介绍一些常见的数据预处理方法。 1. 数据清洗 数据清洗是指在数据去除不合理、重复或者无效的数据,保证数据的完整性和准确性。常见的数据清洗方法包括: - 删除重复数据 - 去除异常值 - 去除不合理数据 - 填充缺失值 2. 缺失值处理 缺失值是指数据集某些数据缺失的情况。常见的缺失值处理方法包括: - 删除缺失值 - 插值法填补缺失值 - 使用平均值、位数、众数等统计量填补缺失值 3. 异常值处理 异常值是指数据集不符合正常规律的数据。常见的异常值处理方法包括: - 删除异常值 - 修改异常值 - 使用插值法填补异常值 4. 特征选择 特征选择是指从原始数据选择最具有代表性的特征,以便用于分析和建模。常见的特征选择方法包括: - 过滤式特征选择 - 包裹式特征选择 - 嵌入式特征选择 5. 特征缩放 特征缩放是指将不同量纲的特征缩放到相同的范围内。常见的特征缩放方法包括: - 标准化 - 归一化 - 对数变换 6. 特征变换 特征变换是指通过对原始数据进行某些变换,使得数据更适合用于分析和建模。常见的特征变换方法包括: - 主成分分析(PCA) - 线性判别分析(LDA) - 因子分析 以上就是一些常见的数据预处理方法,通过对数据进行适当的预处理,可以提高数据分析和建模的准确性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值