我有一个网络抓取python脚本,当你运行时,它会要求一个网址。我想要发生的是验证用户输入,例如。如果它是有效的网址或没有来自用户的输入。我已经完成尝试和除了这几乎可以工作,它会显示我希望用户看到的消息,但它也会返回Traceback调用,我不想这样做。我只想显示自定义错误消息。谁能帮我实现这个?这是我的代码:
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()
答案 0 :(得分:1)
您可以这样做:
try:
# ...
except Exception as e:
print("What you want to show")
编辑“如何在异常时阻止它执行?”
您可以在try
中将except
和wget()
作为@sabujhassan提及,或者您可以在捕获异常时退出:
except Exception as e:
print("Exception caught!")
exit(1)
编辑2:“是否可以循环程序,例如,当没有用户输入时,只是不断要求用户输入网址?” 是的,您可以简单地在无限循环下覆盖它,并在选择正确的值时中断。
while True:
try:
# Your logic ...
break
except:
print 'No input or wrong url format usage: http://wwww.domainname.com '
print 'Try again!'
答案 1 :(得分:1)
除了函数 wget()和 main()之外,请使用try。例如:
def wget(webpage):
try:
print '[*] Fetching webpage...\n'
page = webpage.read()
return page
except:
print "exception!"
答案 2 :(得分:1)
您执行初始try / except,但是一旦捕获到异常,您就不会退出。问题是只有在传入某些内容时才会填写网页,因此由于“网页”尚未定义,因此稍后会失败,因此答案是在抛出异常后退出。
所以:
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)
答案 3 :(得分:0)
试试这个(替换第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 '
对于后半部分(从主要开始):
if __name__ == '__main__':
if len(sys.argv) == 2 :
main(sys.argv[1])
else :
main()
(我不赞成pythonic 4 space规则,我不得不替换空格键)