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

  • TopDJMag TV

    TopDJMag TV

    29 Temmuz 2010
  • Vladimir Jenko

    Vladimir Jen

    1 Mart 2010
  • Videojug

    Videojug

    25 EKİM 2006