Yanıtlar:
Bu hata iletisi, bir örneği izlemek veya Python 2 print
deyimini kullanan bir programı çalıştırmak için Python 3'ü kullanmaya çalıştığınız anlamına gelir :
print "Hello, World!"
Yukarıdaki ifade Python 3'te çalışmaz. Python 3'te yazdırılacak değerin etrafına parantez eklemeniz gerekir:
print("Hello, World!")
“SyntaxError: 'print' çağrısında eksik parantezler” , Python 3'ü çalıştırırken Python 2 öğreticisini takip etmeye çalışan kullanıcılara yardımcı olmak için Python 3.4.2'de eklenen yeni bir hata mesajıdır.
Python 3'te, yazdırma değerleri ayrı bir ifade olmaktan sıradan bir işlev çağrısı olmaktan çıktı, bu yüzden şimdi parantezlere ihtiyaç duyuyor:
>>> print("Hello, World!")
Hello, World!
Python 3'ün önceki sürümlerinde, yorumlayıcı neyin yanlış gidebileceğine dair yararlı ipuçları vermeden genel bir sözdizimi hatası bildirir:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
Gelince neden print
ziyade bir boşluk bırakılarak yazılır ile stderr'e birden fazla öğe baskı ziyade çizgi biten gibi daha karmaşık şeyler yaptı nasıl, ifadenin temel şekliyle ilgili etmedi Python 3'te sıradan bir fonksiyon, oldu.
Python 2'de:
>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6
Python 3'te:
>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6
Eylül 2017'de Python 3.6.3 sürümünden başlayarak, Python 2.x yazdırma sözdizimi ile ilgili bazı hata mesajları, Python 3.x muadillerini önermek üzere güncellenmiştir:
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
"Yazdırma çağrısında eksik parantezler" durumu bir derleme zamanı sözdizimi hatası olduğundan ve bu nedenle ham kaynak koduna erişebildiğinden, önerilen değiştirmedeki satırın geri kalanına tam metni ekleyebilir. Bununla birlikte, şu anda bu ifadenin etrafına yerleştirmek için uygun alıntıları incelemeye çalışmamaktadır (bu imkansız değildir, henüz yapılmadığı için yeterince karmaşıktır).
TypeError
Sağa kaydırma operatörü için yükseltilmiş da özelleştirilmiş edilmiştir:
>>> 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>)"?
Kod çalıştığında değil, bu hata derlendiğinden kaynaklandığından, ham kaynak koduna erişimi yoktur ve bu nedenle kullanıcının yazdığı şey yerine önerilen değiştirme ifadesinde meta değişkenleri ( <message>
ve <output_stream>
) kullanır . Sözdizimi hata durumundan farklı olarak, özel sağ kaydırma hata iletisindeki Python ifadesinin etrafına tırnak koymak basittir.
Ne yazık ki, eski xkcd komik artık tamamen güncel değil.
Python 3.0'dan beri şunları yazmalısınız:
print("Hello, World!")
Ve birisi hala bu antigravity
kütüphaneyi yazacak :(
Python 2'den Python 3'e sözdiziminde bir değişiklik var. Python 2'de,
print "Hello, World!"
çalışır ancak Python 3'te parantezleri şu şekilde kullanın:
print("Hello, World!")
Bu, Scala'ya ve Java'ya yakın bir sözdizimidir.
Kodunuzun hem Python 2 hem de 3'te çalışması gerekiyorsa, bunu programınızın başına yükleyerek bunu elde edebilirsiniz:
from __future__ import print_function # If code has to work in Python 2 and 3!
Sonra Python 3 ile yazdırabilirsiniz:
print("python")
Yeni bir satır oluşturmadan bir şey yazdırmak istiyorsanız - bunu yapabilirsiniz:
for number in range(0, 10):
print(number, end=', ')
Temel olarak, Python 3.x'ten beri print
parantez ile kullanmanız gerekir .
Python 2.x : "Yüzüklerin Efendisi" yazdır
Python 3.x : print ("Yüzüklerin Efendisi")
print
Bir oldu deyimi içinde 2.x , ama bir var fonksiyonu içinde 3.x . Şimdi, bunun birkaç iyi nedeni var.
>>> items = ['foo', 'bar', 'baz'] >>> print(*items, sep='+') foo+bar+baz
Ayrıca sadece Python2.7
ve arasındaki sözdizimi değişikliği hakkında her şeyi bildiğimi ekleyebilirim Python3
ve kodum doğru print("string")
ve hatta
yazılmıştır print(f"string")
...
Ama hata ayıklama bir süre sonra benim bash script benim gibi python çağırdığını fark ettim:
python dosya_adı.py
hangi python2.7
hata verdi python komut dosyası varsayılan olarak kullanarak etkisi vardı . Bu yüzden bash betiğimi şu şekilde değiştirdim:
python3 dosya_adı.py
hangi kaba hata düzelten komut dosyasını çalıştırmak için python3 kullanır.
Buradaki doğrudan cevapların dışında, python 2 ve 3 arasındaki diğer önemli farkı not etmeliyiz. Resmi python wiki , neredeyse tüm önemli farklılıklara girer ve sürümlerden birini ne zaman kullanmanız gerektiğine odaklanır. Bu blog yazısı ayrıca mevcut python evrenini ve python 3'e geçmenin bir şekilde çözülmemiş bulmacasını açıklamak için iyi bir iş çıkarıyor.
Anlayabildiğim kadarıyla, python dilini öğrenmeye başlıyorsunuz. Python 3 rotasında devam etmeden önce yukarıda bahsedilen makaleleri göz önünde bulundurmalısınız. Sadece sözdiziminizin bir kısmını değiştirmek zorunda kalmayacak, aynı zamanda hangi paketlerin kullanabileceğinizi (python 2'nin bir avantajı) ve kodunuzda yapılabilecek potansiyel optimizasyonları (python 3'ün bir avantajı) düşünmeniz gerekecektir. .