在Python 2.7.3上正常工作,但在Python 3中出错
所以,当我在 Python 2.7.3 中运行这段代码,使用命令 ./randline.py test.txt 时,这段代码运行得很好。但是当我尝试在 Python 3 中运行这段代码时,我收到了一个错误信息:“/usr/bin/python: 无法打开文件 '3': [Errno 2] 没有这样的文件或目录”。
import random, sys
from optparse import OptionParser
class randline:
def __init__(self, filename):
f = open(filename, 'r')
self.lines = f.readlines()
f.close()
def chooseline(self):
return random.choice(self.lines)
def main():
version_msg = "%prog 2.0"
usage_msg = """%prog [OPTION]... FILE
Output randomly selected lines from FILE."""
parser = OptionParser(version=version_msg,
usage=usage_msg)
parser.add_option("-n", "--numlines",
action="store", dest="numlines", default=1,
help="output NUMLINES lines (default 1)")
options, args = parser.parse_args(sys.argv[1:])
try:
numlines = int(options.numlines)
except:
parser.error("invalid NUMLINES: {0}".
format(options.numlines))
if numlines < 0:
parser.error("negative count: {0}".
format(numlines))
if len(args) != 1:
parser.error("wrong number of operands")
input_file = args[0]
try:
generator = randline(input_file)
for index in range(numlines):
sys.stdout.write(generator.chooseline())
except IOError as (errno, strerror):
parser.error("I/O error({0}): {1}".
format(errno, strerror))
if __name__ == "__main__":
main()
这段代码在 Python 3 的解释器中有什么问题吗?
2 个回答
0
因为python2.7.3和python3.*的语法不一样,所以在python2.7.3上能运行的代码,可能在python3.*上就不行了。例如:
print 'hello world'
在python2.7.3上可以正常运行,但在python3.*上会报错。要让它在python3.*上运行,我们需要改成print('Hello world')
所以只要把语法改成python3.*的格式就可以了。不过我建议你还是用python2.7.3来运行你的代码。
5
看起来你在运行的是 python 3
(中间有个空格)。你应该用 python3
来运行。