【问题标题】:Inserting while raising custom exceptions在引发自定义异常时插入
【发布时间】:2014-09-09 18:48:48
【问题描述】:
if not(my_value < max_limit):
    print "value of is %g and hence invalid. It can be upto $g" % (my_value, max_limit)
    raise LimitFailureCheck("Failed due to Incorrect value")

我在其他模块中将我的自定义异常定义为LimitFailureCheck。我想在 my_value > max_limt 时提高它。因此,我按照上述方法进行了编码。它工作正常。我想问的是给用户更多信息,我已经写了打印声明,也说明了问题到底是什么。我可以在提出自定义异常时做同样的事情吗?我试过了

raise LimitFailureCheck("Failed due to Incorrect %g value" % my_value)

但它在打印输出时提出了相同的语句。

raise LimitFailureCheck("Failed due to Incorrect %g value" % my_value)

我希望得到

raise LimitFailureCheck("Failed due to Incorrect 99 value")

我收到的输出:


Traceback (most recent call last):
  File "runtest.py", line 69, in attempt
    func()
  File "c:\Users\pran\projects\check.py", line 66, in runmytest
    raise LimitFailureCheck('"Failed due to Incorrect %g value" % my_value
)
LimitFailureCheck

【问题讨论】:

  • 您确定它没有同时打印带有替换的消息吗?它会将raise 显示为回溯的最后一行,但之后它还应该打印异常消息。
  • 这没有任何意义。标准的字符串格式化运算符(%.format)应该在任何上下文中工作,包括创建的异常。我怀疑您正在查看输出的错误部分,正如@BrenBarn 所建议的那样。
  • 这个问题似乎是题外话,因为问题不是真实的。
  • 它是如何打印的? - 其他代码是否捕获异常并打印,或者您是否在脚本终止时收到标准 python 回溯消息?你是说这两种情况都打印了“由于值不正确而失败”?
  • 我认为您的代码捕获了异常,打印回溯然后打印异常的类型,而不是异常消息。所以,有趣的代码是异常处理程序。

标签: python exception exception-handling custom-exceptions raise


【解决方案1】:

当您在命令行上运行 python 并且由于未处理的异常而退出 python 时,python 将显示回溯和异常字符串。

当我运行这个测试程序时

class LimitFailureCheck(Exception):
    pass

raise LimitFailureCheck('i am %s' % 'sad')

Python 说

Traceback (most recent call last):
  File "sad.py", line 4, in <module>
    raise LimitFailureCheck('i am %s' % 'sad')
__main__.LimitFailureCheck: i am sad

请注意,python 显示了失败的行和失败消息。如果您不想要这种行为,您可以捕获异常并打印您自己的消息。这是另一个脚本

class LimitFailureCheck(Exception):
    pass

try:
    raise LimitFailureCheck('i am %s' % 'sad')
except LimitFailureCheck, e:
    print 'raise LimitFailureCheck("%s")' % e

显示

raise LimitFailureCheck("i am sad")

【讨论】:

    【解决方案2】:

    您可能想尝试格式化。

    raise LimitFailureCheck('Failed due to Incorrect {0} value'.format(my_value)
    

    【讨论】:

    • 这是另一种格式化字符串的方法,但它并不能解决格式化字符串为什么不打印的问题。
    • @tdelaney 我怎么读到它确实打印了,只是没有格式化,它打印了 %g 而不是它的格式值。 format() 更一致,但也许我解释错了问题。
    • 哦,我明白了!我们都错了。 OP 抱怨,因为 python 回溯显示发生故障的行,而不是格式化的消息。顺便说一句 - 我不是反对者,所以无法解决这个问题。
    • @tdelaney 嗯嗯,我希望我所做的每一个答案都会被否决,毕竟它是堆栈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    相关资源
    最近更新 更多