SORU
4 EYLÜL 2010, CUMARTESİ


Python "" ifadesi bir try-except bloğu ile birlikte

Bunu doğru bir şekilde kullanmak için "" deneyin-dışında bir blok?: birlikte deyimi ile python.

try:
    with open("file", "r") as f:
        line = f.readline()
except IOError:
    <whatever>

Eğer öyleyse, o şeyler yapmanın eski yolu da dikkate alınarak

try:
    f = open("file", "r")
    line = f.readline()
except IOError:
    <whatever>
finally:
    f.close()

"Kod üç satır kurtulabiliriz burada?" ifadesi ile temel avantajıdır Bana o kadar çekici gelmiyorbu kullanma durumu için("gerçi" ifadesi diğer anlamları var). bunu anlıyorum

EDİT: kod özdeş iki blok yukarıdaki işlevselliği?

EDİT2: ilk birkaç cevaplar genellikle kullanmanın yararları hakkında konuşmak "", ama bu gibi marjinal burada yarar. Biz başından beri (veya olması gerektiğini) açıkça f arama.() yakın yıldır. Bir yararı özensiz kodlayıcıları kullanarak yararlanacaktır sanırım "".

CEVAP
5 EYLÜL 2010, Pazar


  1. Verdiğin iki kod blokları değileşdeğer
  2. Olarak nitelendirdi kodueski yol şeyler yapıyorciddi bir hata var: dava açılış dosyası başarısız ikinci bir durum alacak finally f olmadığı için yan tümcesi bağlı.

Eşdeğer eski stil kodu şöyle olacaktır:

try:
    f = open("file", "r")
    try:
        line = f.readline()
    finally:
        f.close()
except IOError:
    <whatever>

Gördüğünüz gibi, with deyimi şeyler daha az hata eğilimli hale getirebilir. Python daha yeni sürümleri (2.7, 3.1) with bir deyim içinde birden çok ifadeleri birleştirebilirsiniz. Örneğin:

with open("input", "r") as inp, open("output", "w") as out:
    out.write(inp.read())

Bunun dışında, şahsen herhangi bir istisna mümkün olduğunca erken yakalamak için kötü bir alışkanlık olarak görüyor. Bu istisnalar amacı değil. Başarısız olan IO işlevi daha karmaşık bir operasyonun parçası ise, çoğu durumda Error tüm işlemi iptal etmek ve dış düzeyde ele alınması bu yüzden. with ifadeleri kullanılarak, iç düzeyde try...finally tüm bu açıklamalar kurtulabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FILIPeeeK

    FILIPeeeK

    22 Mayıs 2006
  • Numberphile

    Numberphile

    15 EYLÜL 2011
  • WiseOwlTutorials

    WiseOwlTutor

    21 EKİM 2011