【问题标题】:Python functions return 1 when there is an exceptionPython 函数在出现异常时返回 1
【发布时间】:2011-10-21 06:19:42
【问题描述】:

你能解释一下为什么出现异常时followin函数返回“1”吗?返回“1”的目的是什么?

def initialize():
    """
    Starting point for the program.
    """
    try:
        go = Car()
        print "Instance of Car created"
    except KeyboardInterrupt:
        return 1

【问题讨论】:

  • 因为设计者认为在 KeyboardInterrupt 的情况下返回“1”是个好主意...
  • 没有更多上下文,您的猜测与我们的猜测一样好。请提供有关此 sn-p 嵌入的一般程序的更多信息。
  • 好吧,我还以为是普通的python概念,有异常时返回“1”。
  • initialize 被调用的上下文是什么?它声称是“程序的起点”——是从__main__ 发出的调用,返回此函数的返回码?
  • 其实在“go”创建之后,还有一个语句,它调用了Car类的一个方法,它完成了主要的工作。但是我很困惑为什么初始化函数在出现异常时返回 1。当我按 Ctrl+C 时,会有一个键盘中断,对吗?程序退出?那么为什么 initialize() 返回 1?

标签: python exception return


【解决方案1】:

在发生错误时返回非零值是 C 语言中相当常见的习惯用法。

我的预感是创建此函数的人习惯于用 C 进行编程并且不熟悉异常处理。如果没有更大的代码示例,就无法判断,但如果我是对的,那么在此函数返回 1 或非零值的情况下调用此函数时可能存在某种错误处理。

如果是这种情况,使用异常的更合适的方法是使用raise 向上传递异常以在其他地方处理,或者在函数中处理异常。

【讨论】:

  • 当我按下 Ctrl+C 时发生键盘中断,对吗?创建一个 Car 类的实例应该只需要几毫秒,那么你为什么认为他们在这里插入了一个 KeyboardInterrupt 异常呢?他们认为用户可能会在这些毫秒内按下 Ctrl+C 吗?
  • @alwbtc:如果没有看到代码,我无法告诉你需要多长时间。可能是在构建 Car 类时出现了一个错误,导致程序陷入无限循环或类似情况。这可能已作为调试工具到位。
【解决方案2】:

在我看来,没有必要这样做,只有当 Car() 构造函数花费太长时间并且您想在 initialize() 返回时处理它。

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 2014-05-16
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    相关资源
    最近更新 更多