2016-05-17 14 views
2

das ich habe folgendes Problem mit meinem Code eine Ausnahme bei der Propagierung:Problem mit Exception Handling in Python

Was sollte der Code tun:

Es dauert einen Eingang für Nummer eines von Kombinationen oder Testfällen ausgeführt werden.

Es dauert n = Nummer und seine Macht = p. (d. h.)

Wenn p und n positiv sind, muss sie 2^3 = 8 drucken und zurückgeben - das funktioniert.

Wenn entweder n oder p negativ ist, muss gedruckt werden "n und p sollte nicht negativ sein" - das funktioniert nicht.

Mein Code:

class Calculator(): 
    def power(self,n,p): 
     self.n=n 
     self.p=p 
     try: 
      raise NameError("n and p should be non-negative") 

     except NameError: 
      a=pow(n,p) 
      return a 
myCalculator=Calculator() 
T=int(raw_input()) 
for i in range(T): 
    n,p = map(int, raw_input().split()) 
    try: 
     ans=myCalculator.power(n,p) 
     print ans 
    except Exception,e: 
     print e 

Eingang gegeben

4 
3 5 
2 4 
-1 -2 
-1 3 

Ausgabe erhalten:

243 
16 
1.0 
-1 

Aber ich Shou ld habe "n und p sollte nicht negativ sein" für den 3. und 4. Testfall erhalten, da in den letzten beiden Testfällen (Testfall Nummer 3 und 4) einer der beiden Werte negativ war.

Was ist los?

+0

Sie testen nicht wirklich für die Werte, um positiv zu sein. – L3viathan

Antwort

1

Sie überprüfen nicht die Werte. Willst du so etwas?

class Calculator(): 
    def power(self,n,p): 
     self.n=n 
     self.p=p 
     if n<0 or p<0: 
      raise NameError("n and p should be non-negative") 
     a=pow(n,p) 
     return a 

A NameError macht nicht viel Sinn machen, obwohl, ersetzen Sie es durch ValueError.

+0

Ich versuchte es andersherum auch früher, aber das hat auch nicht funktioniert, bitte verzeihen Sie, wie ich eine neue Biene bin: Klassenrechner(): def Leistung (self, n, p): self.n = n self.p = p Versuch: wenn n> 0 und p> 0: a = pow (n, p) ein zurückzukehren, außer ValueError, e: print "n und p sollte nicht negativ sein": Ich werde versuchen, Ihren Code und lassen Sie wissen –

+0

ja, Sie haben absolut Recht, ich dachte mein Fehler und fand heraus, was ich falsch gemacht habe. Hut ab –