पायथन में "सिंटेक्सएर्रोर: मिसिंग कोष्ठकों को 'प्रिंट' करने का क्या मतलब है?"


389

जब मैं printपायथन में एक बयान का उपयोग करने की कोशिश करता हूं , तो यह मुझे यह त्रुटि देता है:

>>> print "Hello, World!"
  File "<stdin>", line 1
    print "Hello, World!"
                        ^
SyntaxError: Missing parentheses in call to 'print'

इसका क्या मतलब है?

जवाबों:


601

इस त्रुटि संदेश का अर्थ है कि आप पायथन 3 का उपयोग एक उदाहरण का अनुसरण करने या एक प्रोग्राम चलाने के लिए कर रहे हैं, जो पायथन 2 का उपयोग करता है print:

print "Hello, World!"

उपरोक्त कथन पायथन 3 में काम नहीं करता है। पायथन 3 में आपको मुद्रित होने के लिए मूल्य के चारों ओर कोष्ठक जोड़ना होगा:

print("Hello, World!")

"SyntaxError: 'प्रिंट' के लिए कॉल में कोष्ठक गुम होना" एक नया त्रुटि संदेश है जो मुख्य रूप से पायथन 3 को चलाते समय पायथन 2 ट्यूटोरियल का पालन करने की कोशिश कर रहे उपयोगकर्ताओं की मदद करने के लिए मुख्य रूप से पायथन 3.4.2 में जोड़ा गया था।

पायथन 3 में, प्रिंटिंग वैल्यू एक अलग स्टेटमेंट से एक साधारण फंक्शन कॉल होने के रूप में बदल गई, इसलिए अब इसे कोष्ठक की आवश्यकता है:

>>> print("Hello, World!")
Hello, World!

पायथन 3 के पुराने संस्करणों में, दुभाषिया केवल एक सामान्य वाक्यविन्यास त्रुटि की रिपोर्ट करता है, बिना किसी उपयोगी संकेत के जो कि गलत हो सकता है।

>>> print "Hello, World!"
  File "<stdin>", line 1
    print "Hello, World!"
                        ^
SyntaxError: invalid syntax

से संबंधित कि print पायथन 3 में एक साधारण कार्य क्यों बन गया, यह कथन के मूल रूप से संबंधित नहीं था, बल्कि यह भी था कि आपने रेखा को समाप्त करने के बजाय ट्रेलिंग स्थान के साथ कई वस्तुओं को प्रिंट करने के लिए अधिक जटिल चीजें कैसे कीं।

पायथन 2 में:

>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6

पायथन 3 में:

>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6

सितंबर 2017 में पायथन 3.6.3 रिलीज़ के साथ शुरू, पायथन 2.x प्रिंट सिंटैक्स से संबंधित कुछ त्रुटि संदेश उनके पायथन 3.x समकक्षों की सिफारिश करने के लिए अपडेट किए गए हैं:

>>> print "Hello!"
  File "<stdin>", line 1
    print "Hello!"
                 ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?

चूंकि "मिसिंग कोष्ठक में कॉल टू प्रिंट" केस एक संकलित समय वाक्यविन्यास त्रुटि है और इसलिए कच्चे स्रोत कोड तक पहुंच है, यह सुझाए गए प्रतिस्थापन में शेष पाठ पर पूर्ण पाठ को शामिल करने में सक्षम है। हालांकि, यह वर्तमान में उस अभिव्यक्ति के आसपास रखने के लिए उपयुक्त उद्धरणों को काम करने की कोशिश नहीं करता है (यह असंभव नहीं है, बस पर्याप्त रूप से जटिल है कि यह नहीं किया गया है)।

TypeErrorसही पारी ऑपरेटर के लिए उठाया भी अनुकूलित कर दिया गया है

>>> 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>)"?

चूंकि यह त्रुटि तब उठाया जाता है, जब कोड संकलित होने के बजाय, यह कच्चे स्रोत कोड तक पहुंच नहीं रखता है, और इसलिए उपयोगकर्ता जो भी वास्तव में टाइप करता है, उसके बजाय सुझाए गए प्रतिस्थापन अभिव्यक्ति में मेटा-चर ( <message>और <output_stream>) का उपयोग करता है। । सिंटैक्स त्रुटि मामले के विपरीत, यह कस्टम राइट शिफ्ट एरर मैसेज में पायथन एक्सप्रेशन के आसपास उद्धरणों को रखने के लिए सीधा है।


3
शीर्ष पर सारांश जोड़ने के लिए @ एंट्टी-हापला के लिए मेरा धन्यवाद जो त्रुटि संदेश की उत्पत्ति की लंबी व्याख्या पर जारी रखने से पहले सीधे सवाल का जवाब देता है :)
ncoghlan

मैंने समुदाय विकी के उत्तर को भी बंद कर दिया, क्योंकि इसके लिए लगातार एसओ प्रतिनिधि लगातार जमा हो रहा है, यह मेरे लिए सही नहीं लगता है ( त्रुटि संदेश और इस एसओ प्रश्न के सह-विकसित होने की पृष्ठभूमि के लिए Bugs.python.org/issue21669 देखें )
ncoghlan

4
नमस्कार! मुझे लगता है कि यह टूल किसी को docs.python.org/2/library/2to3.html
Jhonatas Kleinkauff

1
अपने python 3 प्रिंट () लाइनों को अपने कोड में जोड़ने के लिए अपने 2.7 फ़ाइल में भविष्य के आयात print_function से लाइन जोड़ें । इसलिए कोड 2.7+ और 3.0+ के साथ संगत हो जाता है
MasterControlProgram

आप सिस्टम को पायथन 2.7 बनाम 3 का उपयोग करने के लिए कैसे मजबूर करते हैं? शायद यह इसके लिए एक अच्छी जगह है।
प्रैक्सिटेलिस 6

25

दुर्भाग्य से, पुरानी xkcd कॉमिक अब तक पूरी तरह से अद्यतित नहीं है।

https://imgs.xkcd.com/comics/python.png

पायथन 3.0 के बाद से आपको लिखना होगा:

print("Hello, World!")

और किसी को अभी भी उस antigravityपुस्तकालय को लिखना है :(


6
हालांकि वहाँ है ... आप इसे आयात करने की कोशिश की है? ;)
टायर


18

पाइथन 2 से पाइथन 3 तक के सिंटैक्स में बदलाव होता है। पाइथन 2 में,

print "Hello, World!" 

काम करेगा, लेकिन पायथन 3 में, कोष्ठक का उपयोग करें

print("Hello, World!")

यह Scala और Java के पास के बराबर सिंटैक्स है।


4

यदि आपका कोड पायथन 2 और 3 दोनों में काम करना चाहिए, तो आप इसे अपने कार्यक्रम की शुरुआत में लोड करके प्राप्त कर सकते हैं:

from __future__ import print_function   # If code has to work in Python 2 and 3!

फिर आप पायथन 3 तरीके से प्रिंट कर सकते हैं:

print("python")

यदि आप नई लाइन बनाए बिना कुछ प्रिंट करना चाहते हैं - तो आप यह कर सकते हैं:

for number in range(0, 10):
    print(number, end=', ')

Python3 में मेरे लिए उस आयात के साथ भी काम नहीं किया। कोड कोष्ठक के बिना है।
लॉजिकब्लोक 7

3

पायथन 3 में, आप केवल इस प्रकार प्रिंट कर सकते हैं:

print("STRING")

लेकिन पायथन 2 में, कोष्ठक आवश्यक नहीं हैं।


3

मूल रूप से, पायथन 3.x के बाद से आपको उपयोग करने की आवश्यकता है print कोष्ठक के साथ है।

अजगर 2.x : "लॉर्ड ऑफ द रिंग्स" प्रिंट करें

अजगर 3.x : प्रिंट ("लॉर्ड ऑफ द रिंग्स")


explaination

print2.x में एक बयान था , लेकिन यह 3.x में एक फ़ंक्शन है । अब, इसके कई अच्छे कारण हैं।

  1. पायथन 3.x के फंक्शन फॉर्मेट के साथ, अधिक लचीलापन तब आता है जब कॉमन के साथ कई आइटम्स को अलग किया जाता है।
  2. आप कथन के साथ तर्क का प्रयोग नहीं कर सकते। 3.x में यदि आपके पास उन मदों की सूची है, जिन्हें आप विभाजक के साथ प्रिंट करना चाहते हैं, तो आप ऐसा कर सकते हैं:
>>> items = ['foo', 'bar', 'baz']
>>> print(*items, sep='+') 
foo+bar+baz
  1. आप एक कथन को ओवरराइड नहीं कर सकते। यदि आप प्रिंट के व्यवहार को बदलना चाहते हैं, तो आप ऐसा कर सकते हैं जब यह एक फ़ंक्शन है, लेकिन जब यह एक बयान नहीं है।

2

मैं भी सिर्फ जोड़ सकता है कि मैं के बीच वाक्य रचना परिवर्तन के बारे में सब कुछ जानता था Python2.7और Python3, और मेरे कोड सही तरीके के रूप में लिखा गया था print("string")और यहां तक कि print(f"string") ...

लेकिन डिबगिंग के कुछ समय बाद मुझे महसूस हुआ कि मेरी बैश स्क्रिप्ट अजगर को बुला रही है:

python file_name.py

जिसमें डिफ़ॉल्ट रूप से मेरी पाइथन स्क्रिप्ट को कॉल करने का प्रभाव था python2.7जिसने त्रुटि दी। इसलिए मैंने अपनी बैश स्क्रिप्ट को इसमें बदल दिया:

python3 file_name.py

स्क्रिप्ट को चलाने के लिए python3 में से कौन सा मोटे का उपयोग करता है जिसने त्रुटि को ठीक किया।


आप यह
बताने

यह एक अच्छा विचार है हाँ!
अल्फा ब्रावो

1

यहां सीधे उत्तरों के बाहर, एक को अजगर 2 और 3 के बीच अन्य महत्वपूर्ण अंतर पर ध्यान देना चाहिए। आधिकारिक अजगर विकी लगभग सभी प्रमुख अंतरों में जाता है और इस पर ध्यान केंद्रित करता है कि आपको दोनों संस्करणों में से किसका उपयोग करना चाहिए। यह ब्लॉग पोस्ट वर्तमान अजगर ब्रह्मांड की व्याख्या करने का एक अच्छा काम करता है और किसी तरह से अजगर 3 में जाने की अनसुलझी पहेली है।

जहाँ तक मैं बता सकता हूँ, आप अजगर भाषा सीखना शुरू कर रहे हैं। पायथन 3 मार्ग को जारी रखने से पहले आपको उपरोक्त लेखों पर विचार करना चाहिए। न केवल आपको अपने कुछ सिंटैक्स को बदलना होगा, आपको यह भी सोचना होगा कि कौन से पैकेज आपके लिए उपलब्ध होंगे (अजगर 2 का लाभ) और संभावित अनुकूलन जो आपके कोड में हो सकते हैं (पायथन 3 का लाभ) ।

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