পাইথনে "সিন্ট্যাক্স এরিয়ার: 'প্রিন্টের জন্য কল করতে পারা বন্ধনী" কী বোঝায়?


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

"সিনট্যাক্স এরির: 'প্রিন্টের জন্য কল হয়ে যাওয়া বন্ধনী' হ'ল একটি নতুন ত্রুটি বার্তা যা পাইথন ৩.৪.২ এ প্রাথমিকভাবে যুক্ত করা হয়েছে যে পাইথন 3 চালানোর সময় পাইথন 2 টি টিউটোরিয়াল অনুসরণ করার চেষ্টা করা ব্যবহারকারীদের সহায়তা করার জন্য।

পাইথন 3-এ, মুদ্রণের মানগুলি একটি পৃথক বিবৃতি থেকে একটি সাধারণ ফাংশন কল হিসাবে পরিবর্তিত হয়েছিল, সুতরাং এখন এটির প্রথম বন্ধনী প্রয়োজন:

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

পাইথন 3 এর পূর্ববর্তী সংস্করণগুলিতে, দোভাষী কেবল জেনেরিক সিনট্যাক্স ত্রুটিটি রিপোর্ট করে, কী কী ভুল হতে পারে সে সম্পর্কে কোনও কার্যকর ইঙ্গিত না দিয়ে:

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

হিসাবে কেন print পাইথন 3 একজন সাধারণ ফাংশন, যে বিবৃতি মৌলিক ফর্ম সঙ্গে সম্পর্কযুক্ত করা হয়নি, বরং কিভাবে আপনি একটি trailing স্থান সঙ্গে stderr হবে একাধিক আইটেম মুদ্রণ বদলে লাইন বিভক্তি মত আরো জটিল জিনিষ করেনি হয়ে ওঠে।

পাইথন 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 রিলিজ দিয়ে শুরু করে পাইথন ২.x প্রিন্ট সিনট্যাক্স সম্পর্কিত কিছু ত্রুটি বার্তা তাদের পাইথন ৩.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
শীর্ষে সংক্ষিপ্তসার যোগ করার জন্য @ অ্যান্টি-হাপালাকে ধন্যবাদ জানাই যা ত্রুটি বার্তার উত্সের দীর্ঘতর ব্যাখ্যা অব্যাহত রাখার আগে সরাসরি প্রশ্নের উত্তর দেয় :)
এনকোঘলান

আমি সম্প্রদায়ের উইকির উত্তরটিও সরিয়ে দিয়েছি , যেহেতু ধীরে ধীরে এই জন্য আরও এসও প্রতিনিধি সংগ্রহ করা আমার পক্ষে সঠিক মনে হয় না ( ত্রুটি বার্তা এবং এই SO প্রশ্নটি কীভাবে উত্থিত হয়েছে তার পটভূমির জন্য bugs.python.org/issue21669 দেখুন )
ncoghlan

4
হ্যালো! আমি মনে করি এই সরঞ্জামটি কাউকে ডক্স.পাইথন.আর.
2 /

1
আপনার কোডটিতে নতুন পাইথন 3 প্রিন্ট () লাইন যুক্ত করতে আপনার 2.7 ফাইলটিতে ভবিষ্যতের আমদানি প্রিন্ট_ফংশন থেকে লাইন যুক্ত করুন। সুতরাং কোডটি 2.7+ এবং 3.0+ এর সাথে সামঞ্জস্য হয়
মাস্টারকন্ট্রোল প্রোগ্রাম

আপনি কীভাবে সিস্টেমটিকে পাইথন ২.7 বনাম 3 ব্যবহার করতে বাধ্য করেন? সম্ভবত এটি এটির জন্য ভাল জায়গা।
প্রেক্সাইটেলস

25

দুর্ভাগ্যক্রমে, পুরানো xkcd কমিকটি সম্পূর্ণরূপে আপ টু ডেট নয়।

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

পাইথন ৩.০ থেকে আপনাকে লিখতে হবে:

print("Hello, World!")

এবং কারও কাছে এখনও সেই antigravityলাইব্রেরিটি লিখতে হবে :(


6
অ্যান্টিগ্রাভিটি যদিও আছে ... আপনি কি এটি আমদানির চেষ্টা করেছেন? ;)
tyrion


18

পাইথন 2 থেকে পাইথন 3-তে বাক্যবিন্যাসের পরিবর্তন রয়েছে Py

print "Hello, World!" 

পাইথন 3 এ কাজ করবে তবে, প্রথম বন্ধনী ব্যবহার করুন

print("Hello, World!")

এটি স্কেলার সমান বাক্য গঠন এবং জাভার কাছাকাছি।


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=', ')

পাইথন 3 এ এমনকি আমদানি করেও আমার পক্ষে কাজ করেনি। কোড প্রথম বন্ধনী ছাড়াই।
লজিকব্লোক করুন

3

পাইথন 3 এ আপনি কেবল এই হিসাবে মুদ্রণ করতে পারেন:

print("STRING")

কিন্তু পাইথন 2 এ, প্রথম বন্ধনী প্রয়োজনীয় নয়।


3

মূলত পাইথন ৩.x থেকে আপনার প্রথম printবন্ধনী ব্যবহার করা দরকার ।

পাইথন ২.x : "রিংয়ের লর্ড" মুদ্রণ করুন

পাইথন 3.x : মুদ্রণ (" রিংগুলির লর্ড")


Explaination

printএকটি ছিল বিবৃতি মধ্যে 2.x কিন্তু এটি একটি এর ফাংশন মধ্যে 3.x । এখন, এর বেশ কয়েকটি ভাল কারণ রয়েছে।

  1. পাইথন ৩.x এর ফাংশন বিন্যাসের সাথে, কমম্যানকে পৃথক করে একাধিক আইটেমগুলি মুদ্রণের সময় আরও নমনীয়তা আসে।
  2. আপনি কোনও বিবৃতি দিয়ে যুক্তি স্প্ল্যাটিং ব্যবহার করতে পারবেন না। 3.x এ যদি আপনার কাছে বিভাজকের সাথে মুদ্রণ করতে চান এমন আইটেমগুলির একটি তালিকা থাকে তবে আপনি এটি করতে পারেন:
>>> items = ['foo', 'bar', 'baz']
>>> print(*items, sep='+') 
foo+bar+baz
  1. আপনি কোনও বিবৃতি ওভাররাইড করতে পারবেন না। আপনি যদি মুদ্রণের আচরণ পরিবর্তন করতে চান, আপনি যখন এটি কোনও ফাংশন তখন করতে পারেন তবে এটি যখন কোনও বিবৃতি হয় তখন না।

2

আমিও শুধু যোগ করতে পারে যে আমি মধ্যে বাক্য গঠন পরিবর্তন সম্পর্কে সবকিছু জানত Python2.7এবং Python3, এবং আমার কোড সঠিকভাবে হিসেবে লেখা হয়েছিল print("string")এবং এমনকি print(f"string")...

তবে ডিবাগিংয়ের কিছুক্ষণ পরে আমি বুঝতে পারি যে আমার বাশ স্ক্রিপ্টটি পাইথনকে এইভাবে ডাকছে:

পাইথন ফাইল_নাম.পি

যা আমার অজগর স্ক্রিপ্টটি ডিফল্টরূপে python2.7ত্রুটি দিয়েছে তা ব্যবহার করে কল করার প্রভাব ফেলেছিল । সুতরাং আমি আমার বাশ স্ক্রিপ্ট এ পরিবর্তন করেছি:

পাইথন 3 ফাইল_নাম.পি

স্ক্র্যাপটি চালনার জন্য অজগর 3 ব্যবহার করে কোনটি মোটা?


এছাড়াও আপনি যা পাইথন সঙ্গে ফাইল লোড করতে অবস্থায় ফাইলের উপরে একটি কুঁড়েঘর যোগ করতে পারিনি
OneCricketeer

হ্যাঁ এটি একটি ভাল ধারণা!
আলফা ব্রাভো

1

এখানে প্রত্যক্ষ উত্তরের বাইরে, পাইথন 2 এবং 3 এর মধ্যে অন্য মূল পার্থক্যটি নোট করা উচিত সরকারী পাইথন উইকি প্রায় সমস্ত প্রধান পার্থক্যের মধ্যে যায় এবং যখন আপনার কোনও সংস্করণ ব্যবহার করা উচিত সেদিকে দৃষ্টি নিবদ্ধ করে। এই অজগর মহাবিশ্ব এবং অজগর 3 এ যাওয়ার কোনওরকম অমীমাংসিত ধাঁধাটি ব্যাখ্যা করার জন্য এই ব্লগ পোস্টটিও দুর্দান্ত কাজ করে।

আমি যতদূর বলতে পারি, আপনি অজগর ভাষা শিখতে শুরু করেছেন। অজগর 3 রুটে চালিয়ে যাওয়ার আগে আপনার উপরোক্ত নিবন্ধগুলি বিবেচনা করা উচিত। আপনাকে কেবল আপনার সিনট্যাক্সের কিছু পরিবর্তন করতে হবে না, আপনাকে কী প্যাকেজগুলি পাওয়া যাবে তা সম্পর্কেও ভাবতে হবে (পাইথন 2 এর সুবিধা) এবং আপনার কোডে তৈরি হতে পারে এমন সম্ভাব্য অপ্টিমাইজেশন (পাইথন 3 এর সুবিধা) ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.