【问题标题】:do not understand this use of sys module不明白这个sys模块的使用
【发布时间】:2012-01-30 16:43:12
【问题描述】:

以下是 A Byte of Python 教程中的代码:

import sys

filename = 'poem.txt'

def readfile(filename):
    #Print a file to standard output
    f = file(filename)
    while True:
        line = f.readline()
        if len(line) == 0:
            break
        print line,
    f.close()

if len(sys.argv) < 2:
    print 'No action specified'
    sys.exit() //<--This is where the error is occurring

if sys.argv[1].startswith('--'):
    option = sys.argv[1][2:] #fetches sys.argv[1] without first 2 char
    if option == 'version':
        print 'Version 1.2'

    elif option == 'help':
        print '''\
This program prints files to the standard output.
Any number of files can be specified.
Options include:
    --version: Prints the version number
    --help: Displays this help'''

    else:
        print 'Unknown option'
    sys.exit()

else:
    for filename in sys.argv[1:]:
        readfile(filename)

当我运行此代码时,出现以下错误:

Traceback (most recent call last):
  File "C:/Python/sysmodulepr.py", line 17, in <module>
    sys.exit()
SystemExit

我不明白为什么。请帮忙。

【问题讨论】:

  • 您可以检查this question 是否在没有回溯的情况下退出
  • 我尝试运行此代码,但没有出现“错误”。下面的答案正确地将其识别为SystemExit 异常,这并不是真正的错误,而是(有效地)一个允许您在程序退出之前进行清理的钩子。但通常SystemExit 异常不会产生这样的回溯。这里发生了一些奇怪的事情......
  • 您使用的 Python 版本是什么?这不是普通的 Python 安装,对吧?
  • 在这里告诉我们更多关于上下文的信息。您是如何执行此操作的?

标签: python


【解决方案1】:

如果您使用的是 IDLE,它无论如何都会打印堆栈。尝试从命令行运行您的脚本,在 IDE 外部执行时它不会打印该错误消息。

【讨论】:

    【解决方案2】:

    这不是错误。 sys.exit() 引发 SystemExit 异常以允许 try:... finally 块清理使用的资源

    闲置试试:

    import sys
    
    sys.exit()
    

    来自sys.exit() 的文档:

    退出 Python。这是通过引发 SystemExit 异常来实现的,因此由 try 语句的 finally 子句指定的清理操作将被执行,并且可以在外部级别拦截退出尝试。

    编辑

    除非您尝试在某些交互式解释器(例如 Idle)中运行脚本,否则不应正常打印该错误。 没什么好担心的,但是脚本看起来像是独立的,所以你应该这样使用它。

    【讨论】:

      【解决方案3】:

      它告诉你 sys.exit() 已经在你的程序的第 17 行执行了。

      The entry for for sys.exit in the Python documentation 告诉你这将退出你的程序。

      如果不产生其他输出,这条线就无法执行,所以我认为问题中缺少一些东西。

      【讨论】:

      • 这得到了SystemExit的文档的支持:“当它不被处理时,Python解释器退出;不打印堆栈回溯。”
      猜你喜欢
      • 2019-05-10
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2016-08-12
      • 2020-04-26
      • 1970-01-01
      相关资源
      最近更新 更多