2016-04-14 12 views
1

bana bir istisna veririm python'da yeni başlayanlar kursuna devam ediyorum ve yarın istisnalar konusunda bir test hazırlıyorum. Geometrik ortalamayı bir listeden yapmaya çalışıyorum. Listeye negatif bir değer girdiğimde, python geometrik ortalamayı hesaplar ve bana karmaşık bir sayı verir (belli ki). Ancak, testim için hazırladım, listede negatif bir değer olduğunda bir istisna oluşturulmasını istiyorum, ancak bunu nasıl yapacağımı bilmiyorum. kimse yardım ederdi.Python'u karmaşık bir sayıya (-2)^0.5'den nasıl engellerim ve bunun yerine

Python3.4'te çalışıyorum. Kodumu burada görmek istiyorsan. Kodumu nasıl daha verimli hale getireceğime dair başka bir tavsiye bile edeyim. şimdiden teşekkürler.

  #LOAD A LIST 
      while True: 
       try: 
        string = input("please enter a list of numbers separated by commas \n:",) 
        L = [float(x) for x in string.split(",")] 
        #print(L) 
        break 
       except ValueError: 
        print("There seems to be a value error in that list") 
        pass 

      #COMPUTE GEOMETRIC MEAN 
      def gm(L): 
       cnt = 1 
       try: 
        for i in range(len(L)): 
         cnt=cnt*L[i] 
        geo = (cnt)**(1/len(L)) 
        return geo 
       except ValueError: 
        print("Value error!") 
       except TypeError: 
        print("type error!") 

      print("geometric mean is, ", gm(L)) 

cevap

1

Python, bu gibi temel davranışları değiştirecek şekilde yapılandırılamaz, ancak istediğiniz zaman kendi özel durumlarınızı oluşturabilirsiniz.

def gm(L): 
    if any(x < 0 for x in L): 
     raise ValueError("List cannot have negative values") 
    ... 
1

ürün negatifse açıkça bir istisna yükseltebilirsiniz, ör .:

if cnt < 0: 
    raise ValueError('Negative product') 
geo = (cnt)**(1/len(L)) 
return geo 

İşte raising exceptions bir öğretici var.

3

İlk yöntem, istisnaları kendiniz test edin ve kaldırın.

İkinci yöntemde, yerleşik operatör yerine math.pow kullanın.

+1

Re: İkinci yöntem: "math.pow()", bir "ValueError: math domain error" istisnasını artıracaktır; ancak bu, "pow()" işlevini yalnızca kullanmak için daha basit olur “ValueError: negatif sayı kesirli bir güce yükseltilemez” anlamına gelir; bu da muhtemelen daha açık ve bu nedenle çoğu insanın anlaması muhtemelen daha kolay olacaktır. – martineau

İlgili konular