在Python 2.7.3上正常工作,但在Python 3中出错

-4 投票
2 回答
915 浏览
提问于 2025-04-17 13:34

所以,当我在 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 来运行。

撰写回答