2011-07-05 19 views
25

olarak ayarlanıp ayarlanmadığını kontrol ettim. Son zamanlarda başlatılmamış olabilecek değişkenler için küçük bir kontrol uygulamak zorunda kaldım (ve varsayılan değerleri None). bunu yapmak için iyi bir yoldur -, acaba güzel sınırındaki, gözlerimi,Değişkenlerden birinin Hiçbiri

if None in (var1, var2, var3): 
    error_out() 

While: Ben bu geldi? yolu bu mu? Bunun bazı beklenmedik sonuçlar doğuracağı durumlar var mı?

+2

Bana iyi görünüyor. –

+2

Bence gayet iyi. – Tadeck

+1

Tamamen sıfırlanmamış için iyi, çünkü biz var1 = (Yok,) 'gibi geçecek olan aptal köşe durumlarını önemsemiyoruz. – smci

cevap

10

şeyden önce, kod, geçerli okunabilir, özlü ... yani onu (deyimler zaman ve yeni bir dil özellikleriyle geliştikçe) yapmak yolu olmayabilir ama kesinlikle arasında biridir pythonic bir şekilde bunu yapmak için bir yol.

İkincisi, sadece iki gözlem: piton hataları üretmek için

standart yol raise Exceptions etmektir. Elbette istisnai yükseltme işlevini bir işlev içinde tamamlayabilirsiniz, ancak oldukça sıradan bir şey olduğundan, bu tasarımı belirli bir nedenden dolayı seçip seçmediğinizi merak ettim. Kendi Exception sınıfınızı yazabildiğinizden, dosyaya bir hata mesajını kaydetmek gibi boilerplate kodu bile sarma fonksiyonundan ziyade sınıfın kendisinde olabilir.

Testinizi yazdığınız yol, 'un None değişkenlerine değişkenlerinize bir değer atamayacaksınız. Bu şimdi bir sorun olmayabilir, ancak gelecekte esnekliğinizi sınırlayabilir. başlangıç ​​noktaları için kontrol diğer bir yolu basitçe değil söz konusu değişken için bir başlangıç ​​değeri beyan etmek olacak ve daha sonra çizgisinde bir şey yapabilirsiniz: o olacaktır yapmak

try: 
    self.variable_name 
except NameError: 
    # here the code that runs if the variable hasn't been initialised 
finally: 
    # [optional] here the code that should run in either case 
+0

Aslında, doğru, nihai uygulama bir 'İstisna'yı yükseltir. Anlayışlı cevaplar ve gözlemler için çok teşekkürler. – maligree

7

A sadece biraz farklı bir şekilde the built-in all method;

>>> any(a is None for a in [1,0]) 
False 
>>> any(a is None for a in [1,0, None]) 
True 

Yani bir can:

>>> all([1, 2, 3]) 
True 
>>> all([None, 1, 2]) 
False 
>>> all([0, 1]) 
False 
+1

Bunlar OP'nin istediği şeyi yapmaz. "" ve 0 başlatılır Yok, yok. – smci

+0

OP'nin istediği şey bu olmayabilir, ancak bu aslında kabul edilen cevaptan daha uygun şekilde belirli kullanım durumlarına uyar! – Angad

3

beni burada benim iki kuruş bırakmak için izin verin: ancak bu da istediğiniz olmayabilir neyi 0 veya "" gibi yanlış-imsi değerleri yakalayacak:

def checkNone(*args): 
    if any(arg is None for arg in args): 
     error_out() 

Burada yeni bir şey yok. Sadece IMHO belki de bölüm any arg is None daha okunabilir

İlgili konular