2016-04-16 6 views
-2

Ich arbeite durch diese tutorial. Ich arbeite das iterativ durch. An diesem Punkt habe ich folgendes Binary Klasse:Wie für negative Zahl zu testen und ValueError zu erhöhen?

class Binary: 
    def __init__(self,value): 
     self.value = str(value) 
     if self.value[:2] == '0b': 
      print('a binary!') 
      self.value= int(self.value, base=2) 
     elif self.value[:2] == '0x': 
      print('a hex!') 
      self.value= int(self.value, base=16) 
     else: 
      print(self.value) 

    def __int__(self): 
     if self.value[:1] == '-': 
      return ValueError 
     return int(self.value) 

Ich laufe durch eine Reihe von Tests pytest verwenden, einschließlich:

def __int__(self): 
>  if self.value[:1] == '-': 
E  TypeError: 'int' object is not subscriptable 

Ich verstehe den Fehler, da ich den Parameter als int gespeichert . Was ist eine gute Strategie, um auf eine negative Zahl zu testen und in diesem Fall eine valueerror-Ausnahme auszulösen?

+0

'wenn self.value <0'? –

+0

Zwei '__init__' Methoden? – dm295

+0

Einer ist __int__' – user61629

Antwort

1

Wenn value ein Int ist, dann ist value < 0 der Test, dass der Wert negativ ist. Du solltest das schon wissen. Vielleicht sollten Sie das Lernprogramm in der Dokumentation überprüfen. Ein anderes Problem ist, dass Ihre init Methode verwechselt wird. Sie wandelt die Eingabe in eine Zeichenfolge um und wandelt die Zeichenfolge (zurück?) Manchmal in einen int um. Wenn init beendet ist, sollte self.value einen zulässigen Wert des gewünschten Typs haben.

+0

Danke Terry, ich hätte den Wert <0 realisieren sollen. Im zweiten Punkt verwandle ich alle Eingabeparameter in eine Zeichenkette, weil ich eine Zeichenkette in Scheiben schneiden kann, um nach Dingen wie '0b' zu suchen. aber ich wollte den Wert als int speichern. Können Sie einen besseren Ansatz vorschlagen? – user61629

Verwandte Themen