gpt4 book ai didi

python - 将 Python 2 程序移植到 Python 3,随机线生成器

转载 作者:太空狗 更新时间:2023-10-29 22:07:09 30 4
gpt4 key购买 nike

我有一个用 Python2 编写的随机线生成器程序,但我需要将它移植到 Python3。你给程序选项 -n [number] 和一个文件参数来告诉它从文件中随机输出 [number] 行数。这是该程序的源代码:

#!/usr/bin/python

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] [FILE]...

Output randomly selected lines from each 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("input at least one operand!")

for index in range(len(args)):
input_file = args[index]
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()


当我用 python3 运行它时:

python3 randline.py -n 1 file.txt

我收到以下错误:

  File "randline.py", line 66
except IOError as (errno, strerror):
^
SyntaxError: invalid syntax

你能告诉我这个错误是什么意思以及如何解决吗?

谢谢!

最佳答案

"except IOError as (errno, strerror)" 依赖于一个鲜为人知的事实,即 Python 2 中的异常是可迭代的,并且您可以迭代给异常的参数通过迭代异常本身。

这当然打破了 Python 的“显式优于隐式”规则,因此在 Python 3 中已被删除,因此您不能再这样做了。而是这样做:

except IOError as e:
errno, strerror = e.args

这更清晰并且适用于所有版本的 Python。

关于python - 将 Python 2 程序移植到 Python 3,随机线生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7775062/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com