2016-04-10 12 views
0

Mein Code ist eine Lösung der Teilmenge Summe:Ich finde diesen intermittierenden Fehler: Was bedeutet das?

import numpy as np 

def subset_sum(theSet,target): 
    n=len(theSet)  
    if(target==0): 
     return np.empty([0]) #emptySet 
    if(target<0 or n==0): 
     return None 
    theAuxSet=subset_sum(theSet[0:n-1],target) 
    if (theAuxSet!=None): 
     return theAuxSet 
    theAuxSet=subset_sum(theSet[0:n-1],target-theSet[n-1]) 
    if(theAuxSet!=None): 
     return np.append(theAuxSet,theSet[n-1]) 
    return None  



if __name__ == '__main__': 

    theSet=np.array([8,6,7,5,3,10,9]) 
    target=15 
    solution=[] 
    print subset_sum(theSet,target) 

Der Fehler unten passiert ist. Wenn der Fehler nicht auftritt, funktioniert der Code wie erwartet:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 699, in runfile 
    execfile(filename, namespace) 
    File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 81, in execfile 
    builtins.execfile(filename, *where) 
    File "/home/daniel/Documents/Cursos/Caju/UNB/Métodos de Análise Econômica - UNB/2016/Slides/Part I - Aula 10 Backtracking/subsetSum.py", line 25, in <module> 
    subset_sum(theSet,target) 
    File "/home/daniel/Documents/Cursos/Caju/UNB/Métodos de Análise Econômica - UNB/2016/Slides/Part I - Aula 10 Backtracking/subsetSum.py", line 10, in subset_sum 
    theAuxSet=subset_sum(theSet[0:n-1],target) 
    File "/home/daniel/Documents/Cursos/Caju/UNB/Métodos de Análise Econômica - UNB/2016/Slides/Part I - Aula 10 Backtracking/subsetSum.py", line 10, in subset_sum 
    theAuxSet=subset_sum(theSet[0:n-1],target) 
    File "/home/daniel/Documents/Cursos/Caju/UNB/Métodos de Análise Econômica - UNB/2016/Slides/Part I - Aula 10 Backtracking/subsetSum.py", line 10, in subset_sum 
    theAuxSet=subset_sum(theSet[0:n-1],target) 
    File "/home/daniel/Documents/Cursos/Caju/UNB/Métodos de Análise Econômica - UNB/2016/Slides/Part I - Aula 10 Backtracking/subsetSum.py", line 10, in subset_sum 
    theAuxSet=subset_sum(theSet[0:n-1],target) 
    File "/home/daniel/Documents/Cursos/Caju/UNB/Métodos de Análise Econômica - UNB/2016/Slides/Part I - Aula 10 Backtracking/subsetSum.py", line 13, in subset_sum 
    theAuxSet=subset_sum(theSet[0:n-1],target-theSet[n-1]) 
    File "/home/daniel/Documents/Cursos/Caju/UNB/Métodos de Análise Econômica - UNB/2016/Slides/Part I - Aula 10 Backtracking/subsetSum.py", line 11, in subset_sum 
    if (theAuxSet!=None): 
    File "/usr/lib/python2.7/warnings.py", line 29, in _show_warning 
    file.write(formatwarning(message, category, filename, lineno, line)) 
    File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 119, in write 
    self.old_stderr.write(colored_text) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 45: ordinal not in range(128) 
+0

Bitte lesen Sie meine Antwort auf eine andere Frage wie folgt hier: http://stackoverflow.com/questions/36536106/unicodeencodeerror-ascii-codec-cant-encode-character-u-xae-in-position-22/36536177# 36536177 – n1c9

Antwort

1

Scheint wie eine numpy Warnung diesen Fehler verursacht. Dies ist die Warnung, die ich war in der Lage vor Ort zu finden:

temp.py:13: FutureWarning: comparison to `None` will result in an elementwise object comparison in the future. 
    if(theAuxSet!=None): 

Nach wie dieses Refactoring:

def subset_sum(theSet,target): 
    n=len(theSet)  
    if target==0: 
     return np.empty([0]) #emptySet 
    if target<0 or n==0: 
     return None 
    theAuxSet=subset_sum(theSet[0:n-1],target) 
    if theAuxSet is not None: 
     return theAuxSet 
    theAuxSet=subset_sum(theSet[0:n-1],target-theSet[n-1]) 
    if theAuxSet is not None: 
     return np.append(theAuxSet,theSet[n-1]) 
    return None 

Die Warnung war verschwunden.

Anstatt a != None zu verwenden, sollten Sie a is not None verwenden. Dies ist ein Spezialfall für None, da es ein Singleton ist. is prüft nach Identität, wobei == Vergleichsprüfungen durchführt.

+0

Der Fehler bleibt bestehen ... Auch wenn ich den Druck entfernen, ist der Fehler immer noch da. – DanielTheRocketMan

+0

Über welche nicht druckbaren Zeichen sprichst du? – DanielTheRocketMan

+0

@DanielTheRocketMan Meine Antwort aktualisiert, sag mir, ob es funktioniert. – Bharel