不理解sys模块的这个用法
这里是《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 个回答
1
这不是一个错误。sys.exit()
会引发一个叫 SystemExit
的异常,这样可以让 try:... finally
这个代码块去清理之前使用的资源。
你可以在 Idle 中试试:
import sys
sys.exit()
关于 sys.exit() 的文档中提到:
从 Python 中退出。这是通过引发 SystemExit 异常来实现的,因此在 try 语句的 finally 子句中指定的清理操作会被执行,而且可以在外层拦截退出尝试。
编辑
通常情况下,这个错误不会被打印出来,除非你在一些交互式解释器中运行脚本(比如 Idle)。这没什么好担心的,但这个脚本看起来是独立的,所以你应该把它当作独立的脚本来使用。
2
如果你在用IDLE这个工具,它会显示出错误的堆栈信息。你可以试着从命令行运行你的脚本,这样在IDE外面执行的时候就不会显示那个错误信息了。
3
它告诉你,程序的第17行执行了sys.exit()这个命令。
在Python文档中关于sys.exit的说明告诉你,这个命令会让你的程序退出。
这行代码执行的时候肯定会有其他输出,所以我觉得问题中可能缺少了一些信息。