Pesan kesalahan ini berarti bahwa Anda berusaha menggunakan Python 3 untuk mengikuti contoh atau menjalankan program yang menggunakan pernyataan Python 2 print
:
print "Hello, World!"
Pernyataan di atas tidak berfungsi dalam Python 3. Dalam Python 3 Anda perlu menambahkan tanda kurung di sekitar nilai yang akan dicetak:
print("Hello, World!")
“SyntaxError: Hilang tanda kurung dalam panggilan untuk 'mencetak'” adalah pesan kesalahan baru yang ditambahkan dalam Python 3.4.2 terutama untuk membantu pengguna yang mencoba mengikuti tutorial Python 2 saat menjalankan Python 3.
Dalam Python 3, nilai pencetakan diubah dari pernyataan yang berbeda menjadi panggilan fungsi biasa, jadi sekarang perlu tanda kurung:
>>> print("Hello, World!")
Hello, World!
Dalam versi Python 3 yang lebih lama, interpreter hanya melaporkan kesalahan sintaksis generik, tanpa memberikan petunjuk yang berguna tentang apa yang mungkin salah:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
Adapun mengapa print
menjadi fungsi biasa di Python 3, itu tidak berhubungan dengan bentuk dasar pernyataan, tetapi lebih kepada bagaimana Anda melakukan hal-hal yang lebih rumit seperti mencetak beberapa item ke stderr dengan ruang tambahan daripada mengakhiri baris.
Dengan Python 2:
>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6
Dengan Python 3:
>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6
Dimulai dengan rilis Python 3.6.3 pada September 2017, beberapa pesan kesalahan yang terkait dengan sintaks cetak Python 2.x telah diperbarui untuk merekomendasikan rekanan Python 3.x mereka:
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
Karena kasus "Hilang tanda kurung dalam panggilan untuk mencetak" adalah kesalahan sintaks waktu kompilasi dan karenanya memiliki akses ke kode sumber mentah, ia dapat menyertakan teks lengkap pada sisa baris dalam penggantian yang disarankan. Namun, saat ini ia tidak mencoba untuk mengerjakan kutipan yang sesuai untuk ditempatkan di sekitar ungkapan itu (itu bukan tidak mungkin, cukup rumit yang belum dilakukan).
Peningkatan TypeError
untuk operator shift kanan juga telah disesuaikan:
>>> 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>)"?
Karena kesalahan ini dinaikkan ketika kode berjalan, daripada saat dikompilasi, kesalahan itu tidak memiliki akses ke kode sumber mentah, dan karenanya menggunakan meta-variabel ( <message>
dan <output_stream>
) dalam ekspresi penggantian yang disarankan alih-alih apa pun yang sebenarnya diketik pengguna yang diketikkan . Berbeda dengan kasus kesalahan sintaksis, itu mudah untuk menempatkan tanda kutip di sekitar ekspresi Python di pesan kesalahan pergeseran kanan kustom.
Sayangnya, komik xkcd lama tidak sepenuhnya mutakhir.
Sejak Python 3.0 Anda harus menulis:
Dan seseorang masih harus menulis
antigravity
perpustakaan itu :(sumber
Ada perubahan sintaksis dari Python 2 ke Python 3. Dalam Python 2,
akan bekerja tetapi dalam Python 3, gunakan tanda kurung sebagai
Ini adalah sintaks yang setara dengan Scala dan dekat dengan Java.
sumber
Jika kode Anda harus bekerja di Python 2 dan 3, Anda dapat mencapainya dengan memuat ini di awal program Anda:
Kemudian Anda dapat mencetak dengan cara Python 3:
Jika Anda ingin mencetak sesuatu tanpa membuat baris baru - Anda dapat melakukan ini:
sumber
Di Python 3, Anda hanya dapat mencetak sebagai:
Namun dalam Python 2, tanda kurung tidak diperlukan.
sumber
Pada dasarnya, karena Python 3.x perlu Anda gunakan
print
tanda kurung.Python 2.x : cetak "Lord of the Rings"
Python 3.x : print ("Lord of the Rings")
Penjelasan
print
adalah pernyataan di 2.x , tapi itu fungsi di 3.x . Sekarang, ada sejumlah alasan bagus untuk ini.sumber
Saya juga bisa menambahkan bahwa saya tahu segalanya tentang perubahan sintaksis antara
Python2.7
danPython3
, dan kode saya ditulis dengan benarprint("string")
dan bahkanprint(f"string")
...Tetapi setelah beberapa waktu debug saya menyadari bahwa skrip bash saya memanggil python seperti:
yang memiliki efek memanggil skrip python saya secara default menggunakan
python2.7
yang memberi kesalahan. Jadi saya mengubah skrip bash saya menjadi:yang kasar menggunakan python3 untuk menjalankan skrip yang memperbaiki kesalahan.
sumber
Di luar jawaban langsung di sini, orang harus mencatat perbedaan kunci lainnya antara python 2 dan 3. Wiki python resmi masuk ke hampir semua perbedaan utama dan berfokus pada kapan Anda harus menggunakan salah satu versi. Posting blog ini juga melakukan pekerjaan yang baik untuk menjelaskan alam semesta python saat ini dan teka-teki entah bagaimana yang belum terpecahkan untuk pindah ke python 3.
Sejauh yang saya tahu, Anda mulai belajar bahasa python. Anda harus mempertimbangkan artikel yang disebutkan di atas sebelum melanjutkan ke jalur python 3. Anda tidak hanya harus mengubah beberapa sintaks Anda, Anda juga perlu memikirkan paket mana yang akan tersedia untuk Anda (keuntungan dari python 2) dan potensi optimasi yang dapat dibuat dalam kode Anda (keuntungan dari python 3) .
sumber