2016-04-14 3 views
1

Ich nehme einen Anfängerkurs in Python an meiner Uni und ich habe morgen einen Test für Ausnahmen vorbereitet. Ich versuche das geometrische Mittel aus einer Liste zu berechnen. Wenn ich einen negativen Wert in die Liste gebe, berechnet Python das geometrische Mittel und gibt mir (offensichtlich) eine komplexe Zahl. Aber in prep für meinen Test möchte ich eine Ausnahme ausgelöst werden, wenn es einen negativen Wert in der Liste gibt, aber ich weiß nicht, wie das geht? Würde jemand helfen.Wie stoppe ich Python von Computing (-2)^0,5 in eine komplexe Zahl, und geben Sie mir eine Ausnahme statt

Ich arbeite in Python3.4. wenn du meinen Code hier sehen willst. andere Ratschläge, wie Sie meinen Code effizienter machen können, lassen Sie es mich wissen. Danke im Voraus.

  #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)) 

Antwort

1

Python kann nicht konfiguriert werden, um solche grundlegenden Verhaltensweisen zu ändern, aber Sie können Ihre eigenen Ausnahmen auslösen, wann immer Sie möchten.

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

Sie können eine Ausnahme explizit erhöhen, wenn das Produkt negativ ist, z.B .:

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

Hier ist ein Tutorial über raising exceptions.

3

Erste Methode, testen und Ausnahmen selbst auslösen.

Zweite Methode, verwenden Sie math.pow anstelle des eingebauten Operators.

+1

Re: Zweite Methode: 'math.pow()' wird eine "ValueError: math domain error" Ausnahme auslösen, was in Ordnung ist, aber es wäre einfacher, nur die eingebaute 'pow()' Funktion zu verwenden löst einen "ValueError" aus: negative Zahl kann nicht zu einer Bruchzahl erhöht werden - was wohl expliziter ist und daher wahrscheinlich für die meisten Leute leichter zu verstehen ist. – martineau

Verwandte Themen