Ich habe ein Python-Skript für das Web-Scraping, das beim Ausführen nach einer Webadresse fragt. Was ich tun möchte, ist die Benutzereingabe zu validieren, z. wenn es sich um eine gültige Webadresse handelt oder wenn keine Eingabe vom Benutzer erfolgt. Ich habe den Versuch und ausgeführt, außer , was fast funktioniert. Es zeigt die Meldung an, die der Benutzer sehen soll, gibt aber auch Traceback-Aufrufe zurück, und das möchte ich nicht. Ich möchte nur meine benutzerdefinierte Fehlermeldung anzeigen. Könnte mir jemand helfen, dies umzusetzen? Hier ist mein Code:

import sys, urllib, urllib2

try:
    url= raw_input('Please input address: ')
    webpage=urllib.urlopen(url)
    print 'Web address is valid'
except:
    print 'No input or wrong url format usage: http://wwww.domainname.com '

def wget(webpage):
        print '[*] Fetching webpage...\n'
        page = webpage.read()
        return page    
def main():
    sys.argv.append(webpage)

    if len(sys.argv) != 2:
        print '[-] Usage: webpage_get URL'
        return
    print wget(sys.argv[1])

if __name__ == '__main__':
    main()
1
user3034404 10 Dez. 2013 im 20:15

4 Antworten

Beste Antwort

Sie können einfach tun:

try:
    # ...
except Exception as e:
    print("What you want to show")

Bearbeiten: "Wie kann ich die Ausführung stoppen, wenn eine Ausnahme erreicht wird?"

Sie können entweder try und except in wget() haben, wie @sabujhassan erwähnt, oder Sie können beenden, wenn Sie die Ausnahme abfangen:

except Exception as e:
    print("Exception caught!")
    exit(1)

Bearbeiten 2: "Ist es möglich, das Programm zu wiederholen, z. B. wenn keine Benutzereingabe erfolgt, den Benutzer weiterhin zur Eingabe einer Webadresse aufzufordern?" Ja, Sie können es einfach unter Endlos während der Schleife abdecken und unterbrechen, wenn der richtige Wert ausgewählt ist.

while True:
    try:
        # Your logic ...
        break
    except:
        print 'No input or wrong url format usage: http://wwww.domainname.com '
        print 'Try again!'
2
sPaz 10 Dez. 2013 im 16:47

Sie führen den ersten Versuch / aus, aber Sie werden nicht beendet, sobald die Ausnahme abgefangen wurde. Das Problem ist, dass die Webseite nur ausgefüllt wird, wenn etwas übergeben wird. Daher schlägt sie später fehl, da "Webseite" noch nicht definiert wurde. Die Antwort lautet also "Beenden", sobald die Ausnahme ausgelöst wird.

So:

try:
  url= raw_input('Please input address: ')
  webpage=urllib.urlopen(url)
  print 'Web address is valid'
except:
  print 'No input or wrong url format usage: http://wwww.domainname.com '
  sys.exit(1)
1
darless 10 Dez. 2013 im 16:29

Versuchen Sie dies (ersetzt die Zeilen 3-8):

def main(url = None) :
 if not url : # no arguments through sys.argv
  url= raw_input('Please input address: ')
 if not url : # No arguments from the user
  try :       
   webpage=urllib.urlopen(url) 
  except :    # Funky arguments from the user
   print 'Web address is valid'
  finally :
   wget(webpage)
 else :
  print 'No input or wrong url format usage: http://wwww.domainname.com '

Für die zweite Hälfte (ab Haupt):

if __name__ == '__main__':
 if len(sys.argv) == 2 :
  main(sys.argv[1])
 else :
  main() 

(Ich lehne die pythonische 4-Leerzeichen-Regel ab und muss immer wieder Leertasten ersetzen.)

0
Carel 10 Dez. 2013 im 16:45

Verwenden Sie try mit Ausnahme der Funktionen wget () und main () . beispielsweise:

def wget(webpage):
    try:
        print '[*] Fetching webpage...\n'
        page = webpage.read()
        return page    
    except:
        print "exception!"
1
Sabuj Hassan 10 Dez. 2013 im 16:26