अजगर प्रिंट एंड = ''


115

मेरे पास यह अजगर स्क्रिप्ट है, जहां मुझे दौड़ने की जरूरत है gdal_retile.py

लेकिन मुझे इस लाइन पर एक अपवाद मिलता है:

if Verbose:
   print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')

end=''अवैध वाक्य रचना है। मैं क्यों, और लेखक शायद करने के लिए क्या करने के लिए उत्सुक हूँ।

यदि आप पहले से अनुमान नहीं लगाते हैं तो मैं अजगर के लिए नया हूं।


मुझे लगता है कि समस्या का मूल कारण यह है कि ये आयात विफल हो रहे हैं और इसलिए किसी को यह आयात करना चाहिए from __future__ import print_function

try: 
   from osgeo import gdal
   from osgeo import ogr
   from osgeo import osr
   from osgeo.gdalconst import *
except:
   import gdal
   import ogr
   import osr
   from gdalconst import *

2
यह वास्तव में मदद करता है यदि आप ट्रेसबैक को पोस्ट करते हैं जो आपको प्राप्त अपवाद का सबसे अच्छा निदान करता है। स्पष्ट सिंटैक्स त्रुटि उद्धरण खोलने की कमी से है। यदि वह ठीक किया गया था, तो यह पायथन 2 में एक वाक्यविन्यास त्रुटि होगी, जिसमें __future__आयात के बिना प्रिंट फ़ंक्शन नहीं है ।
— माइक ग्राहम

2
एक तरफ, वैरिएबल जो ClassNamesकम-केस अक्षर से शुरू नहीं होना चाहिए।
— माइक ग्राहम

wrt / @ मायिक, अजगर में चर नामकरण और कोडिंग शैली के लिए पूर्ण दिशानिर्देशों के लिए python.org/dev/peps/pep-0008 देखें । दिशानिर्देशों का पालन करना एक अच्छा विचार है क्योंकि पायथन में आपको ज्यादातर सुसंगत पुस्तकालय के साथ काम करने का विशेषाधिकार प्राप्त है और इस प्रकार आप सामान्य अनुमान लगाने के खेल (जैसे PHP) से भी बच सकते हैं, जब आप अन्य लोगों के कोड के साथ काम कर रहे हों।
— एलन प्लम

5
भविष्य में त्रुटियों के साथ मदद के लिए पूछते समय, विशेष रूप से वाक्यविन्यास त्रुटियों , आपको किसी भी रीटिपिंग के बिना, आपके द्वारा चलाए जा रहे सटीक कोड प्रदान करने का प्रयास करना चाहिए ।
— माइक ग्राहम

@ माइक - मैं आमतौर पर इसे फिर से टाइप करने में परेशान नहीं करता, हालांकि मैं ऐसा करने में असमर्थ था क्योंकि कोड एक दूरस्थ कंप्यूटर पर था। मैं भविष्य में और अधिक सावधान रहना सुनिश्चित करूंगा।
— हाथ मरा

जवाबों:


155

क्या आप वाकई Python 3.x का उपयोग कर रहे हैं? पाइथन 2.x में सिंटैक्स उपलब्ध नहीं है क्योंकि printअभी भी एक स्टेटमेंट है।

print("foo" % bar, end=" ")

पायथन में 2.x समान है

print ("foo" % bar, end=" ")

या

print "foo" % bar, end=" "

तर्क के रूप में टपल के साथ प्रिंट करने के लिए कॉल के रूप में।

यह स्पष्ट रूप से बुरा सिंटैक्स है (शाब्दिक खोजशब्द तर्क नहीं लेते हैं)। पायथन में 3.x printएक वास्तविक फ़ंक्शन है, इसलिए यह कीवर्ड तर्क भी लेता है।

पायथन 2.x में सही मुहावरा end=" "है:

print "foo" % bar,

(अंतिम अल्पविराम पर ध्यान दें, यह लाइन को लाइनब्रेक के बजाय एक स्थान के साथ समाप्त करता है)

यदि आप आउटपुट पर अधिक नियंत्रण चाहते हैं, तो sys.stdoutसीधे उपयोग करने पर विचार करें । यह आउटपुट के साथ कोई विशेष जादू नहीं करेगा।

निश्चित रूप से हाल के संस्करणों में पायथन 2.x (2.5 में यह होना चाहिए, 2.4 के बारे में निश्चित नहीं है), आप __future__इसे अपनी स्क्रिप्ट फ़ाइल में सक्षम करने के लिए मॉड्यूल का उपयोग कर सकते हैं :

from __future__ import print_function

वही unicode_literalsकुछ और अच्छी चीजों के साथ जाता है ( with_statementउदाहरण के लिए)। हालांकि यह वास्तव में पुराने संस्करणों में काम नहीं करेगा (अर्थात फीचर पेश किए जाने से पहले बनाया गया था) पायथन 2.x, हालांकि।


1
मैंने खदान संस्करण का उपयोग करके जाँच की dpkg -p pythonऔर यह संस्करण 2.xx.xx था। बहुत बहुत धन्यवाद, मैंने इसे लगाने के सुझाव को लागू किया print "foo" %bar, और इसने पूरी तरह से ठीक काम किया।
— मेहराद

ध्यान रखें, पायथन में print foo, barऔर बीच में एक (सूक्ष्म) अंतर होता है print (foo, bar)2. पूर्व printअपने "तर्क" सूची में दो वस्तुओं के साथ एक बयान है; उत्तरार्द्ध printअपनी तर्क सूची में एकल टपल के साथ एक बयान है।
— चेपनर

आपका उदाहरण print("foo" % bar, end=" ")काम नहीं करेगा, क्योंकि barपरिभाषित नहीं है; तो barआपके उदाहरण में क्या है ? (कम से कम मेरे लिए Python 3.7 के साथ)
— Qaswed

50

इस बारे में कैसा है:

#Only for use in Python 2.6.0a2 and later
from __future__ import print_function

यह आपको पायथन 3.0 स्टाइल printफंक्शन का उपयोग करने की अनुमति देता है बिना print:) की सभी घटनाओं को संपादित करने के लिए :)


17

अजगर 2.7 में यहाँ है कि आप इसे कैसे करते हैं

mantra = 'Always look on the bright side of life'
for c in mantra: print c,

#output
A l w a y s   l o o k   o n   t h e   b r i g h t   s i d e   o f   l i f e

अजगर में 3.x

myjob= 'hacker'
for c in myjob: print (c, end=' ')
#output 
h a c k e r 

5
यार, तुम बस कुछ दिनों के लिए मुझे भ्रमित करने वाली एक समस्या को हल करो, मैं सिर्फ उन सीटी और पुराने दिनों के दृश्य को याद करता हूं लेकिन लायरिस को नहीं, और अब मैं अंततः यह पता लगाता हूं कि वह गीत क्या है !!
— स्फिंक्स-हेनरी

@ स्फिंक्स-हेनरी आपको भाई की मदद करने के लिए खुश हैं
— रितेश करवा

आपके दूसरे उदाहरण पर, ऐसा प्रतीत होता है कि h a c k e r इसमें अक्षरों के बीच में रिक्त स्थान है। मैं पाइथन 3.7.3 का उपयोग कर रहा हूं और मुझे बिल्कुल भी जगह नहीं मिल रही है end=''।
— नगेव

@ नागेव ने बस '' = 'अंत' के बीच एक स्थान रखा
— रितेश करवा

धन्यवाद, मुझे स्पेस नहीं चाहिए, यह सिर्फ इतना है कि मैंने सोचा था कि मैंने आपके कोड को बिना स्पेस के देखा था फिर भी आउटपुट दिया गया था, जो असंगत लग रहा था, बस।
— नगेव

5

सबसे पहले, आप शुरुआत में एक उद्धरण याद कर रहे हैं लेकिन यह शायद एक कॉपी / पेस्ट त्रुटि है।

पायथन 3.x में, end=' 'भाग एक नई रेखा के बजाय प्रदर्शित स्ट्रिंग के बाद एक स्थान रखेगा। पायथन 2.x में एक ही काम करने के लिए, आप अंत में एक कॉमा डालेंगे:

print "Building internam Index for %d tile(s) ..." % len(inputTiles),

मैं अजगर 2 में इस तरह से कुछ करने के लिए intersted हूँ वाक्यविन्यास क्या होगा? आपका क्या मतलब है एक अल्पविराम जोड़ें
— रेमी

1
@ रेमी मेरे जवाब में कोड पायथन 2 में है ... और मैं अंत में कॉमा की बात कर रहा हूं।
— 14

4

मुझे लगता है कि वह पायथन 3.0 का उपयोग कर रहा है और आप पायथन 2.6 का उपयोग कर रहे हैं।


1
अच्छी बात! print("foo" % bar, end = " ")पायथन 2.6 में सिंटेक्स त्रुटि को ट्रिगर करता है end = " "जैसे कि लापता उद्धरण करता है :)
— badp

3

यह सिर्फ एक संस्करण की बात है। चूंकि पायथन 3.x प्रिंट वास्तव में एक फ़ंक्शन है, इसलिए यह अब किसी भी सामान्य फ़ंक्शन की तरह तर्क लेता है।

end=' 'सिर्फ इतना है कि आप बयान के बजाय एक नई लाइन चरित्र के अंत के बाद एक जगह चाहते हैं कहने के लिए है। पायथन 2.x में आपको प्रिंट स्टेटमेंट के अंत में अल्पविराम लगाकर ऐसा करना होगा।

उदाहरण के लिए, जब पायथन 3.x वातावरण में:

while i<5:
    print(i)
    i=i+1

निम्नलिखित आउटपुट देंगे:

0
1
2
3
4

जहाँ तक:

while i<5:
    print(i, end = ' ')
    i=i+1

आउटपुट के रूप में देंगे:

0 1 2 3 4

आधिकारिक दस्तावेज़ीकरण की एक कड़ी print()सहायक हो सकती है, क्योंकि वहाँ कोई '\n'तर्क के लिए डिफ़ॉल्ट मान देख सकता है end: docs.python.org/3/library/functions.html#print
— Qaswed

ऊपर दिए गए उदाहरण की तरह अंत में एक जगह मत भूलना: "हैकर" यहाँ आउटपुट "0 1 2 3 4" होना चाहिए और अंतिम स्थान के साथ समान रूप से होना चाहिए
— alant

2

ऐसा लगता है कि आप केवल एक डबल-उद्धरण खोल रहे हैं। प्रयत्न:

if Verbose:
   print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')

1

मुझे लगता है कि लेखक शायद मतलब था:

if Verbose:
   print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')

वह एक प्रारंभिक उद्धरण के बाद गायब है print(।

ध्यान दें कि के रूप में अजगर 3.0 , printएक समारोह के रूप में एक बयान का विरोध किया है, तो आप अजगर के पुराने संस्करणों का उपयोग कर रहे बराबर होगा:

print "Building internam Index for %d tile(s) ..." % len(inputTiles)

endपैरामीटर साधन लाइन हो जाता है कि ' 'अंत के बजाय एक नई पंक्ति चरित्र पर। पायथन के पुराने संस्करणों में समतुल्य है:

print "Building internam Index for %d tile(s) ..." % len(inputTiles),

(धन्यवाद इग्नासियुस)।


1
,अंत में एक जोड़ना यह कर देगा।
— इग्नासियो वाज़क्वेज़-अब्राम्स

1

उपयोग :: python3 filename.py

मुझे ऐसी त्रुटि हुई, यह ठीक हो गया क्योंकि मेरे पास अजगर के दो संस्करण हैं जो मेरे ड्राइव पर स्थापित हैं python2.7 और python3। निम्नलिखित मेरा कोड था:

#!usr/bin/python

f = open('lines.txt')
for line in f.readlines():
        print(line,end ='')

जब मैं इसे कमांड द्वारा चलाता हूं तो मुझे python lines.pyनिम्नलिखित त्रुटि मिली

#!usr/bin/python

f = open('lines.txt')
for line in f.readlines():
        print(line,end ='')

जब मैं इसे python3 lines.pyसफलतापूर्वक चलाने वाले कमांड द्वारा चलाता हूं


3
#! / usr / bin / env python3
— लियू

1

अजगर 2.7 के लिए मेरे पास एक ही मुद्दा था इस मुद्दे को हल करने के लिए उद्धरण के बिना बस " __future__ आयात प्रिंट_फंक्शन से " का उपयोग करें । यह सुनिश्चित करता है कि पायथन 2.6 और बाद में पायथन 2.x पायथन 3.x प्रिंट फ़ंक्शन का उपयोग कर सकते हैं।


1

यदि आप अजगर 2.7 के साथ काम कर रहे हैं तो यह एक कोशिश करें:

from __future__ import print_function

StackOverflow में आपका स्वागत है: यदि आप कोड, XML या डेटा नमूने पोस्ट करते हैं, तो कृपया टेक्स्ट एडिटर में उन पंक्तियों को हाइलाइट करें और एडिटर टूलबार पर "कोड सैंपल" बटन ({}) पर क्लिक करें या अपने कीबोर्ड पर Ctrl + K का उपयोग करके अच्छी तरह से फॉर्मेट करें। और वाक्य रचना इसे उजागर!
— व्हाट्सएप ग्रुप

0

यहां तक ​​कि मुझे आज भी वही त्रुटि मिल रही थी। और मुझे एक दिलचस्प बात का अनुभव हुआ है। यदि आप अजगर 3.x का उपयोग कर रहे हैं और अभी भी त्रुटि हो रही है, तो यह एक कारण हो सकता है:

आपके पास एक ही ड्राइव पर कई अजगर संस्करण स्थापित हैं। और जब आप f5 बटन को पेश कर रहे हैं तो पायथन शेल विंडो (ver। <3.x) पॉप अप हो जाती है

मुझे आज वही त्रुटि हो रही थी, और मैंने उस चीज़ पर ध्यान दिया। मेरा विश्वास करो, जब मैं अपने कोड को उचित शेल विंडो (ver। 3.x) से निष्पादित करता हूं, तो मुझे संतोषजनक परिणाम मिले


0

हमें उपयोग करने से पहले हेडर आयात करना होगा end='', क्योंकि यह अजगर के सामान्य रनटाइम में शामिल नहीं है।

from __future__ import print_function

यह अब पूरी तरह से काम करेगा


0

अजगर 2 और 3 दोनों के साथ संगत :

sys.stdout.write('mytext')

केवल पायथन 2 के साथ संगत

print 'mytext',

केवल पायथन 3 के साथ संगत

print('mytext', end='')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.