【问题标题】:Is it bad practice to search for strings in exceptions?在异常中搜索字符串是不好的做法吗?
【发布时间】:2019-11-29 11:46:29
【问题描述】:

我正在尝试写一个上下文管理器来处理异常,同样的异常可以出现在不同的函数中:

ValueError: Foo is not Bar

ValueError: Img is not X

等等。

所以我一直在通过解析异常字符串来捕获异常。

这是不受欢迎的吗?

【问题讨论】:

  • 我会为每个错误想出一个新类型,或者至少使用比字符串更多的结构。解析错误字符串对我来说听起来很容易出错。
  • @AlexHart 我认为 OP 不是控制如何抛出错误的人,所以他试图以这种方式处理不同的异常。

标签: python python-3.x error-handling


【解决方案1】:

argparsetest_argparse.py 的单元测试中,有如下测试:

    with self.assertRaises(ArgumentParserError) as cm:
        parser.parse_args(['-V'])
    self.assertEqual('XXX 3.7\n', cm.exception.stdout)

甚至更详细:

    with self.assertRaises(ArgumentParserError) as cm:
        parser.parse_args([])
    msg = str(cm.exception)
    self.assertRegex(msg, 'req_pos')
    self.assertNotIn(msg, 'optional_positional')

大多数测试只是检查特定的异常子类。但是有些确实会检查异常消息。所以单元测试确实有检查消息的工具。

但是为模块定义一些异常子类是个好主意。他们不需要任何特殊的方法或内容。

【讨论】:

  • 您是否建议在生产代码中使用unittest 方法?
猜你喜欢
  • 2017-02-02
  • 2013-09-04
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多