关于python:不理解sys模块的这种用法

do not understand this use of sys module

下面是一个教程中的python字节代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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)

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

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

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


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

python文档中的for sys.exit条目告诉您,这将退出程序。

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


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


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

尝试闲置:

1
2
3
import sys

sys.exit()

从sys.exit()的文档中:

Exit from Python. This is implemented by raising the SystemExit exception, so cleanup actions specified by finally clauses of try statements are honored, and it is possible to intercept the exit attempt at an outer level.

编辑

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