2012-02-10 16 views
20

दायर करने के लिए मुद्रित करने के लिए मैं एक परियोजना की निर्भरता फ़ाइलें लिखने के लिए निम्न अजगर कोड है। यह पायथन 2.x के साथ ठीक काम करता है, लेकिन पाइथन 3 के साथ परीक्षण करते समय यह एक त्रुटि की रिपोर्ट करता है।अजगर 3 ऑपरेटर >>

Traceback (most recent call last): 
    File "../../../../config/makedepend.py", line 121, in <module> 
    print >>depend, s, 
    TypeError: unsupported operand type(s) for >>: 
     'builtin_function_or_method' and '_io.TextIOWrapper' 

सबसे अच्छा तरीका यह अजगर 2.x और 3.x के साथ काम कर पाने के लिए क्या है:

depend = None 
if not nmake: 
    depend = open(".depend", "a") 
dependmak = open(".depend.mak", "a") 
depend = open(".depend", "a") 
print >>depend, s, 

यहाँ त्रुटि है?

+0

"python2.x और 3.x के साथ" पर लपेटता है? आपके पास दोनों संस्करणों में एक ही कोड नहीं हो सकता है। आमतौर पर, आप अजगर 3. में अजगर 2 कार्यकारी –

+3

आप __future__ आयात print_function' से 'का उपयोग अजगर 2. देखें में भी http://python3porting.com अजगर 3 प्रिंट() फ़ंक्शन प्राप्त करने के लिए कर सकते हैं परिवर्तित करने के लिए' 2to3' उपकरण का उपयोग –

उत्तर

31

अजगर 3 में प्रिंट बयान एक समारोह बन गया है। नई वाक्य रचना इस तरह दिखता है: अजगर 3 में

print(s, end="", file=depend) 

इस तोड़ने परिवर्तन का मतलब है कि यह संभव है जब एक फ़ाइल के लिए लिख print बयान/समारोह का उपयोग कर अजगर 2 और 3 में एक ही कोड का उपयोग नहीं है। एक संभावित विकल्प प्रिंट के बजाय depend.write(s) का उपयोग करना होगा।

अद्यतन: J.F. सेबस्टियन सही ढंग से बताते हैं कि आप अजगर 3 वाक्य रचना सक्षम करने के लिए अपने अजगर 2 कोड में from __future__ import print_function उपयोग कर सकते हैं। यह अलग-अलग पायथन संस्करणों में एक ही कोड का उपयोग करने का एक शानदार तरीका होगा।

+3

आप पायथन 2.x में 'प्रिंट()' फ़ंक्शन का उपयोग करने के लिए '__future__ आयात print_function' से' का उपयोग कर सकते हैं। बीटीडब्ल्यू, 'एंड = "" 'प्रिंट' कथन में अल्पविराम के समान नहीं है। तुलना करें ['print'a ',; print'b''] (http://ideone.com/ogwCh) और [' प्रिंट (' ए ', एंड =' '); प्रिंट ('बी') '] (http://ideone.com/py5k7) (नोट: बाद के मामले में' ए' और 'बी' के बीच कोई जगह नहीं)। ' – jfs

8

print() पायथन 3.

में एक समारोह

print(s, end="", file=depend) करने के लिए अपने कोड को बदलें, or let the 2to3 tool do it for you.

+2

आप अंत पैरामीटर काफी सच py2x कोड –

+0

@DavidHeffeman मिलान करने के लिए निर्दिष्ट करने के लिए की जरूरत है। – Amber

2

ध्यान दें कि अजगर 3.6.3 (सितम्बर 2017) में शुरू होने वाले इस मामले के लिए त्रुटि संदेश अजगर 3 वर्तनी की सिफारिश करने तक परिवर्तित होगी:

>>> print >> sys.stderr 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for >>: 
    'builtin_function_or_method' and '_io.TextIOWrapper'. 
    Did you mean "print(<message>, file=<output_stream>)"? 

(स्पष्ट पंक्ति विराम पक्ष-स्क्रॉलिंग बचने के लिए जोड़ा - वास्तविक त्रुटि संदेश सिर्फ अपने टर्मिनल विंडो की चौड़ाई)

संबंधित मुद्दे