哪种更好的方式获取异常消息:str(e)vs e.args [0]?

真崎

让我们考虑一种情况,在这种情况下,我会内置Exception 消息,并在处理消息时存储异常消息。我知道我可以按照以下示例中的两种方式进行操作。

try:
    raise Exception('some message')
except Exception as e:
    value_str = str(e)
    value_args = e.args[0]

是否有理由认为一种方法优于另一种方法?

乔纳森·费恩斯特拉

通常,使用str(e)会更安全,因为在某些情况下e.args[0]会引发索引错误:

try:
    raise Exception()
except Exception as e:
    value = e.args[0]

>>> IndexError: tuple index out of range

在某些情况下,第一个参数实际上不是消息,而str(e)仅仅e.__str__()是应始终返回消息的调用

但是,在您的特定情况下,使用e.args[0]似乎要快一些:

import timeit


def test_args():
    try:
        raise Exception('some message')
    except Exception as e:
        value = e.args[0]


def test_str():
    try:
        raise Exception('some message')
    except Exception as e:
        value = str(e)


print(timeit.timeit('test_args()', setup='from __main__ import test_args'))
print(timeit.timeit('test_str()', setup='from __main__ import test_str'))

>>> 0.5408027
>>> 0.5728966000000001

如果执行速度的这种最小提高很重要,并且您可以确定e始终至少有一个参数,请使用e.args[0]在捕获特定类型的异常时,您还可以考虑直接访问属性。在所有其他情况下,我建议使用str(e)

有关从异常中检索信息的更多选项,请参见traceback模块

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误getPlayer(args [0]);

来自分类Dev

我不断收到错误消息,说我的.NET模型需要具有0个args或仅可选args的构造函数?

来自分类Dev

args ._ [0]中的._ [0]有什么作用?

来自分类Dev

iptfile = args 和 args[0] 或“Python/graminit.c”

来自分类Dev

如果是org-agenda-mode,则用“ Args超出范围:0,0”替换为更漂亮的消息

来自分类Dev

什么是“ 0E-20”

来自分类Dev

如何防止使用0 args构建?

来自分类Dev

(0,somefunc] [args)是什么意思

来自分类Dev

$ args [0]不接受完整参数

来自分类Dev

DirectX-11 实例缓冲区返回 E_INVALID_ARGS

来自分类Dev

打印张量时为“ args_0:0”

来自分类Dev

哪种时间戳格式为“ 07:df:01:0e:0e:28:2a:39”?

来自分类Dev

哪种时间戳格式为“ 07:df:01:0e:0e:28:2a:39”?

来自分类Dev

无法加载dll文件-异常0x8007007E

来自分类Dev

-grep -E -o“ average:。{0,5}”的工作方式

来自分类Dev

0E0 是有效的 JSON 数字吗

来自分类Dev

教类型检查器2 ^ e≢0

来自分类Dev

在什么编码中编码是西班牙语“ñ”eñe 0xa4,大写的eñe 0xa5?

来自分类Dev

Nginx如何获取多个$ args?

来自分类Dev

从@before建议获取args值

来自分类Dev

print(* args,** kwargs)vs print(“ {},{}”。format(* args,** kwargs))

来自分类Dev

在Application.launch(Class,String ... args)中获取args

来自分类Dev

例外:./ e类e_Host中的错误-内联模板0:0

来自分类Dev

ms4: free() 无效指针 0xb74e74e0 ***

来自分类Dev

如何将可变参数函数fn <S,... Args>泛化为fn <S0,... Args0,S1,... Args1,...,SN,... ArgsN>

来自分类Dev

为什么地址大小不同?(0x206a10-0x104382e0)

来自分类Dev

ASCII 0x00A0如何变成0x00E1

来自分类Dev

获取表格DB XXX.0E0(XX代表数字)

来自分类Dev

COMException(0x800401E3):操作不可用(来自HRESULT的异常:0x800401E3(MK_E_UNAVAILABLE))与计划任务

Related 相关文章

  1. 1

    错误getPlayer(args [0]);

  2. 2

    我不断收到错误消息,说我的.NET模型需要具有0个args或仅可选args的构造函数?

  3. 3

    args ._ [0]中的._ [0]有什么作用?

  4. 4

    iptfile = args 和 args[0] 或“Python/graminit.c”

  5. 5

    如果是org-agenda-mode,则用“ Args超出范围:0,0”替换为更漂亮的消息

  6. 6

    什么是“ 0E-20”

  7. 7

    如何防止使用0 args构建?

  8. 8

    (0,somefunc] [args)是什么意思

  9. 9

    $ args [0]不接受完整参数

  10. 10

    DirectX-11 实例缓冲区返回 E_INVALID_ARGS

  11. 11

    打印张量时为“ args_0:0”

  12. 12

    哪种时间戳格式为“ 07:df:01:0e:0e:28:2a:39”?

  13. 13

    哪种时间戳格式为“ 07:df:01:0e:0e:28:2a:39”?

  14. 14

    无法加载dll文件-异常0x8007007E

  15. 15

    -grep -E -o“ average:。{0,5}”的工作方式

  16. 16

    0E0 是有效的 JSON 数字吗

  17. 17

    教类型检查器2 ^ e≢0

  18. 18

    在什么编码中编码是西班牙语“ñ”eñe 0xa4,大写的eñe 0xa5?

  19. 19

    Nginx如何获取多个$ args?

  20. 20

    从@before建议获取args值

  21. 21

    print(* args,** kwargs)vs print(“ {},{}”。format(* args,** kwargs))

  22. 22

    在Application.launch(Class,String ... args)中获取args

  23. 23

    例外:./ e类e_Host中的错误-内联模板0:0

  24. 24

    ms4: free() 无效指针 0xb74e74e0 ***

  25. 25

    如何将可变参数函数fn <S,... Args>泛化为fn <S0,... Args0,S1,... Args1,...,SN,... ArgsN>

  26. 26

    为什么地址大小不同?(0x206a10-0x104382e0)

  27. 27

    ASCII 0x00A0如何变成0x00E1

  28. 28

    获取表格DB XXX.0E0(XX代表数字)

  29. 29

    COMException(0x800401E3):操作不可用(来自HRESULT的异常:0x800401E3(MK_E_UNAVAILABLE))与计划任务

热门标签

归档