2017-01-20 13 views
-1

Hier ist mein Code:Typeerror: sequence Artikel 12: Geplanter str Beispiel gefunden NoneType

import re 
with open('newfiles.txt') as f: 
    s = f.read() 
uniquelist = [] 
error = re.findall(r"[\w]+|[^\s\w]", (s)) 
for word in error: 
    if word not in uniquelist: 
     uniquelist.append(word) 
print ("Here are the words in their first appearing index form: ") 
my_indexes = ' '.join(str(uniquelist.index(word)+1) for word in error) 
print (my_indexes) 
file = open("newfiletwo.txt","w") 
file.write (' '.join(str(my_indexes))) 
file.close() 
file = open("newfilethree.txt","w") 
file.write(' '.join(uniquelist)) 
file.close() 
word_base = None 
with open('newfilethree.txt', 'rt') as f_base: 
    word_base = [None] + [z.strip() for z in f_base.read().split()] 
sentence_seq = None 
with open('newfiletwo.txt', 'rt') as f_select: 
    sentence_seq = [word_base[int(i)] for i in f_select.read().split()] 
print(my_indexes) 
print(' '.join(sentence_seq)) 

Es dauert eine Textdatei und gibt die Positionen (Indizes) der Wörter und Interpunktion innerhalb dieser Gruppe. Wenn sich etwas wiederholt, wird der erste gefundene Positionsindex angegeben. So, es druckt die Indizes aus. Zweitens versuche ich nach dem Speichern der getrennten einzelnen Wörter als Datei und der Liste der Indizes, den Text mit ihnen neu zu erstellen. Die endgültige Ausgabe sollte also der ursprüngliche Satz mit Interpunktion selbst sein. Aber leider, wenn das Programm läuft durch die letzte Zeile des Codes ich diese Fehlermeldung erhalten:

Traceback (most recent call last): 
    File "E:\Python\Final.py", line 26, in <module> 
     print(' '.join(sentence_seq)) 
TypeError: sequence item 12: expected str instance, NoneType found 

Weiß jemand, was das Problem ist?

+0

Nun, 'sentence_seq [12]' 'ist None' ... – thebjorn

+0

@thebjorn Was meinst du ?, ich als Ganzes – tpullemku

+2

' word_base zu python ganz neu bin [0] 'ist' Keine. Wenn eines der Elemente von 'f_select.read(). Split()' '0' ist, wird 'None' in dieses Element von' sentence_seq' gesetzt. Aber 'join()' erwartet, dass alle Listenelemente Strings sind. – Barmar

Antwort

1

Sie, dass print(" ".join(sentence_seq)) wie unten wickeln kann und das Ergebnis posten:

try: 
    print(" ".join(sentence_seq)) 
except TypeError: 
    print("Broken sentence: " + repr(sentence_seq)) 
    raise 

Siehe Beispiel auf repl.it


Dies ist kein fix (aber nützlich sein können, wie die, oben zur Fehlerbehebung):

print(" ".join(filter(None, sentence_seq))) 

wird die None s entfernen, aber nicht beheben, warum sie in erster Linie None sind.


Dies ist ein fix:

my_indexes = ' '.join(str(uniquelist.index(word)) for word in error) 

&

word_base = [z.strip() for z in f_base.read().split()] 

Du fügst 1 den Index, dann ein None zu Beginn der Liste hinzugefügt .. Durch das Entfernen beider Probleme reproduziert sich das Problem nicht mehr.

+0

ungültige Syntax unter 'außer' – tpullemku

+0

Sind Sie sicher, dass Sie es richtig kopieren? funktioniert in Python2.7 und Python3 für mich – TemporalWolf

+0

Wie können Sie ein wenig Code in Kommentaren veröffentlichen? Entschuldigung aus dem Thema lol – tpullemku

0

Dies ist nicht eine Antwort, ist diese Leichtigkeit für die Anzeige nur - Bjorn das ist das angezeigte Ergebnis:

'They' <class 'str'> 
    'say' <class 'str'> 
    'it' <class 'str'> 
    "'" <class 'str'> 
    's' <class 'str'> 
    'a' <class 'str'> 
    'dog' <class 'str'> 
    "'" <class 'str'> 
    's' <class 'str'> 
    'life' <class 'str'> 
    ',' <class 'str'> 
    'They' <class 'str'> 
    None <class 'NoneType'> 
    'They' <class 'str'> 
    'They' <class 'str'> 
    'They' <class 'str'> 
    'say' <class 'str'> 

Es gibt, was oben gezeigt wird, aber was ist der Zweck des Programms ist es, dies zu drucken :

They say it's a dog's life, but for Estrella, born without her front legs, she's adapted to more of a kangaroo way of living. The Peruvian mutt hasn't let her disability hold her back, gaining celebrity status in the small town of Tinga Maria. 
+0

Sie sollten Ihren ursprünglichen Beitrag bearbeiten, um diese Informationen zu enthalten Folgen Sie nicht meinem schlechten Beispiel;) – TemporalWolf

+0

In der Tat, aber Sie haben die 'None ' in Zeile 13 (Position 12, wenn Sie fange an, bei Null zu zählen.) Das ist ein Fehler. Es sollte dort kein 'None' sein (da None keine Zeichenkette ist. Finde heraus, wie die None dort hinkam und repariere es .. :-) – thebjorn

+0

Ich habe keine Ahnung Was mich betrifft, wurde alles in individuelle St umgewandelt Ringe und es gibt nichts anderes zu tun, was diesen Teil des Problems in meinen Augen angeht. Fehle ich etwas? – tpullemku

Verwandte Themen