मेरे पास पाइथन 2 में लिखा गया एक यादृच्छिक रेखा जनरेटर प्रोग्राम है, लेकिन मुझे इसे Python3 पर पोर्ट करने की आवश्यकता है। आप प्रोग्राम को विकल्प-एन [संख्या] और एक फाइल तर्क देते हैं जो फ़ाइल से लाइनों की यादृच्छिक रूप से आउटपुट [संख्या] संख्या को बताने के लिए कहता है। यहां कार्यक्रम के लिए स्रोत है:पायथन 2 प्रोग्राम को पाइथन 3 पर पोर्ट करना, यादृच्छिक रेखा जनरेटर
#!/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):
सही रूप है::
समाधान के लिए धन्यवाद! यह काम करता हैं! हम्म अजीब है क्योंकि कार्यक्रम python2 के साथ काम करता है ... – Shubham
हम्म, शायद यह वैध पायथन 2.x वाक्यविन्यास है, लेकिन यह * बहुत * अजीब है। –
@Ned Batchelder: अपवाद पाइथन 2.x में अनुक्रम हैं। मुझे लगता है कि 'ए, बी)' अपवाद ऑब्जेक्ट पर अनपॅकिंग निष्पादित करता है। मैं देखता हूं [@Lennart Regebro] (http://stackoverflow.com/questions/7775062/porting-python-2-program-to-python-3-random-line-generator/7775321#7775321) पहले से ही इसका उत्तर दिया है। – jfs