2016-10-01 2 views
0
dd = (re.findall(r'">County<(.*?)</td>', lmth2)) 
if not dd: 
    dd = (re.findall(r'<small>Location in <a(.*?)</td>',lmth2) 
      if not dd: 
      county.append("") 
      fin.append(name[o]+';'+address[o]+';'+city[o]+';'+stateorg[o]+';'+county[o]+';'+phone[o]+';'+website[o]) 
      continue 
    else: 
     ee = (re.findall(r'title="(.*?) County', dd[0])) 
     county.append(ee[0]) 
     fin.append(name[o]+';'+address[o]+';'+city[o]+';'+stateorg[o]+';'+county[o]+';'+phone[o]+';'+website[o]) 

Ich versuche, IF NOTs zusammen zu stapeln, um das Ergebnis zu finden. WennStacked IF NOTs

Wenn dd nicht als eine Übereinstimmung kommt, dann möchte ich das zweite Szenario versuchen. Wenn das nicht mit einer Übereinstimmung übereinstimmt, dann möchte ich, um es jetzt zu zeigen, es wird nichts angezeigt und die Zeile wird in der Datei gespeichert. Wenn es zu einem Treffer kommt, dann suche ich weiter auf der zweiten Ebene der Suche mit ee = (re.findall ...)

Bis ich das zweite mögliche Szenario gefunden habe, nach dem alles gesucht hat, funktionierte finden, aber dann fand ich eine weitere mögliche, was ich versuche ich es in das Programm suchen müssen für so hinzuzufügen, und ich halte eine ungültige Syntax immer wieder auf das kommen: auf der zweiten

if not dd: 

Dies ist einer, ist WEG über mich hinaus. Ich bin nicht daran gewöhnt, dieses Problem mit Stacked If's zu haben, wenn ich VB6 benutze. Python scheint die Dinge ein wenig anders zu handhaben.

+0

Auch ... Je nachdem, was Sie versuchen, ist es möglicherweise einfacher, Ihre Logik zu vereinfachen. Denken Sie daran: 'nicht A und nicht B' ist das gleiche wie' nicht (A oder B) '. Für weitere Informationen siehe [DeMorgan's Theorie] (http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/demorgan.html). – Basic

+0

Ich möchte es Bedingung 1 zu testen, bevor es sogar versucht, Bedingung zwei einzurichten. Wenn Bedingung 1 vorhanden ist, wird Bedingung 2 nicht ausgeführt. Daher die Hackordnung und der Ansatz, den ich versuche zu verwenden. – confused

+0

Sie können all das in einer einzigen Anweisung tun. Python verwendet Kurzschlüsse für Operatoren. Sobald es eine Bedingung findet, die verhindert, dass ein Block ausgeführt wird, stoppt es ... sagen Sie haben ... 'if something() und something_else():' ... Während der Ausführung, wenn 'something()' zurückgibt 'False',' something_else() 'wird niemals ausgeführt/getestet. Ich habe hier Funktionen eingefügt, da ich davon ausgehe, dass Sie das tun. Einfache Variablen funktionieren genauso. Siehe http://stackoverflow.com/questions/2580136/does-python-support-short-circuiting. Und ein Wiki-Link: https://en.wikipedia.org/wiki/Short-circuit_evaluation – Basic

Antwort

0

Einrückung ist syntaktisch signifikant in Python. Im Gegensatz zu Sprachen, in denen Blöcke durch Tokens wie begin und end oder { und } bestimmt werden, werden Blöcke in Python durch Einzüge und Gedanken definiert.

Als solche können Sie Python-Code nicht beliebig einrücken. Immer wenn Python auf eine Zeile stößt, die weiter als die darüber liegende Zeile eingerückt ist, erwartet es, dass es die erste Zeile eines neuen Blocks ist. Das Problem, das Sie haben, ist, dass Sie innerhalb der ersten if-Anweisung die Einrückungsstufe dieses Blocks mit der Zeile dd = ... bereits festgelegt haben und dann die nächste if-Anweisung noch weiter eingerückt haben, während sie auf der gleichen Einrückungsebene sein sollte.

Wenn Sie den zusätzlichen Einzug auf der zweiten if not dd: Zeile entfernen, sollte es keinen Syntaxfehler mehr haben.

+0

Ich habe nur den zusätzlichen Einzug entfernt und ich bekomme immer noch den gleichen Fehler auf dem gleichen: – confused

+0

Sie haben auch unübertroffene Klammern in der vorherigen Zeile Dies ist wahrscheinlich der Grund, warum Ihr Texteditor die nächste Zeile mehr eingerückt hat, als es eigentlich hätte sein sollen. –

+0

Entfernen Sie die erste Klammer in der Zeile vor dem zu starken Einzug 'if': Ersetzen Sie' dd = (re.findall ... 'mit' dd = re.findall ... '. –