2017-02-20 2 views
0

ich eine Python-Funktion erstellt haben:Wenn Typeerror, return false

def is_cayley_table(table): 
    try: 
     if type(table) is not list: 
      return False 
     else: 
      n = len(table) 
      poss_values = range(0,n) 
      for i in range(0,n): 
       if len(table[i]) != n: 
        return False 
      for j in range(0,n): 
       if type(table[i][j]) is int and table[i][j] in poss_values: 
        return True 
       else: 
        return False 
    except TypeError: 
     return False 

dann rufe ich die Funktion mit ungültigem Argument:

is_cayley_table([1, 1, 0], [0, 1, 2], [1, 2, 2]) 

Ich möchte die Funktion "False" zurück, aber im Moment bekomme ich das:

File "C:/Users/Jack/OneDrive/Documents/comp_project.py", line 27, in <module> 
    is_cayley_table([1, 1, 0], [0, 1, 2], [1, 2, 2]) 

TypeError: is_cayley_table() takes 1 positional argument but 3 were given 

Wenn jemand helfen könnte, wäre ich sehr dankbar.

Jack

+0

Ich weiß, erwartet. Ich versuche Fehlerbehandlung so einzurichten, dass, wenn ein Benutzer die Klammern vergisst, die Funktion im Gegensatz zu einem TypeError false zurückgibt. – Jack

+1

Wenn Ihre Funktion eine beliebige Anzahl von Argumenten akzeptieren soll, können Sie sie mit 'def is_cayley_table (* args)' definieren. Siehe [Kann eine variable Anzahl von Argumenten an eine Funktion übergeben werden?] (Http://stackoverflow.com/questions/919680/can-a-variable-number-of-arguments-be-passed-to-a-function) – khelwood

+0

Danke Khelwood. – Jack

Antwort

1

Sie fangen Typ Fehler in der Funktion, aber das Problem ist in die Funktion aufrufen; Dies kann nicht in der Funktion selbst gefangen werden.

Ich bin nicht sicher, warum Sie die Funktion mit ungültigen Argumenten aufrufen zu können, müssen, sondern eine Möglichkeit, dies alle Argumente mit der *args Syntax zu akzeptieren, wäre zu unterstützen, dann überprüfen, was Sie haben:

def is_cayley_table(*args): 
    if len(args) != 1: 
     return False 
    table = args[0] 
    ... 
+0

Danke Daniel - v hilfreich. – Jack

0

Zunächst können Sie keine Funktion mit mehr Parametern angeben, als für deklariert wurde. Das ist das größte Problem hier.

Also, wenn Sie die Funktion mit 1 Parameter zur Verfügung stellen und Sie etwas setzen wie

is_cayley_table(([1, 1, 0], [0, 1, 2], [1, 2, 2])) 

Es wird als

+0

Ich verstehe das. Ich habe versucht, eine Fehlerbehandlung durchzuführen, wenn der Benutzer (fälschlicherweise) mehr als ein Argument eingegeben hat. – Jack

+0

Wenn diese Funktion das Backend einer Front-End-Benutzerschnittstelle ist, sollten Sie Benutzereingaben behandeln, bevor Sie Werte an die Funktion übergeben (in einer 'handleUserInput'-Typfunktion). Wenn Sie eine API oder etwas anderes entwickeln, das ein Entwickler verwendet, sollten Sie dem Entwickler vertrauen, dass er keinen so einfachen Fehler macht. – ChickenFeet

Verwandte Themen