在python中捕获异常/运行时错误

时间:2013-12-10 16:15:24

标签: python exception exception-handling runtime

我有一个网络抓取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()

4 个答案:

答案 0 :(得分:1)

您可以这样做:

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

编辑“如何在异常时阻止它执行?”

您可以在try中将exceptwget()作为@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规则,我不得不替换空格键)