【问题标题】:How to display position in Python code after stopping by sys.exit() in Spyder 5在 Spyder 5 中通过 sys.exit() 停止后如何在 Python 代码中显示位置
【发布时间】:2021-12-30 21:43:55
【问题描述】:

要在定义的位置中断代码,我在代码中放置命令sys.exit()

程序停止但不返回停止位置。在控制台和代码窗口中,我都没有看到程序在哪一点停止了。由于我有几个停止命令,我不知道程序从哪里退出,我完全迷失在代码中。

这是一个错误吗?如何以编程方式停止输出位置的代码?最快的方法是什么?

我使用 Spyder 5.1.5 和 Spyder 5.2 与 WinPython 3.9.5.0 并且程序无需安装在 Win10Pro 版本 21H1 上使用。

【问题讨论】:

    标签: spyder


    【解决方案1】:

    sys.exit() 不带任何参数只会终止执行而无需任何进一步的信息。

    如果您需要查看女巫sys.exit 线路被调用,您有多种选择。这里有 2 个简单的解决方案。

    1°) 简单的方法

    sys.exit() 接受一个参数。当您传递一个字符串时,该字符串将在退出时打印。您可以利用这一点来跟踪使用了女巫出口点。

    例子:

    if True:
      sys.exit("exit point 1")
    else:
      sys.exit("exit point 2")
    

    执行时会打印以下内容:

    exit point 1
    

    这非常简单,但需要完整传递您的代码才能更改所有sys.exit 调用。幸运的是,有一个侵入性较小的选项。

    2°) 使用SystemExit 异常

    sys.exit(),最终引发SystemExit 异常。与其他所有异常一样,它可以被捕获,因此您可以使用 traceback 模块打印调用堆栈。

    您所要做的就是用try: except SystemExit: 包围您的主程序,以拦截sys.exit() 调用并打印调用堆栈。

    这是一个简单的例子: 导入系统 导入回溯

    def test():
      print ("entering test")
      sys.exit()
      print ("leaving test")
    
    try:
      test()
      sys.exit()
    except SystemExit as e:
      traceback.print_exc()
      raise e
    

    这个程序的输出将是:

    entering test
    Traceback (most recent call last):
      File "test.py", line 10, in <module>
        test()
      File "test.py", line 6, in test
        sys.exit()
      SystemExit
    

    所以你可以看到你通过文件 test.py 的第 6 行退出了

    python 标准库文档中详细记录了该行为: https://docs.python.org/3/library/sys.html(章节 sys.exit)

    【讨论】:

    • 对我来说这似乎是一个错误,你必须自己纠正这个问题。实际上我想知道如何在定义的位置停止代码并输出位置,不一定使用 sys.exit()。没有此功能,编程 IDE 将毫无用处。例如,在 IDL 语言中,您将任何无意义的字符(您只需编写 'ss' 或其他一些未知命令)放在一行中,程序就会停止并输出位置。这是一种快速的方法。写 sys.exit("exit point 1") 很麻烦。
    猜你喜欢
    • 2019-04-12
    • 2018-09-30
    • 2019-08-05
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多