不明白这个sys模块的用法

时间:2011-12-30 16:51:45

标签: python

以下是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

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

3 个答案:

答案 0 :(得分:3)

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

The entry for for sys.exit in the Python documentation告诉您这将退出您的计划。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

尝试空闲:

import sys

sys.exit()

来自sys.exit()的文档:

  

退出Python。这是通过引发SystemExit异常来实现的,因此可以接受try语句的finally子句指定的清理操作,并且可以拦截外层的退出尝试。

修改

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