【问题标题】:Catch exceptions/runtime errors in python在 python 中捕获异常/运行时错误
【发布时间】:2014-06-04 19:20:24
【问题描述】:

我有一个网页抓取 python 脚本,当你运行它时,它会要求你提供一个网址。我想要发生的是验证用户输入,例如。如果它是一个有效的网址或者没有来自用户的输入。我已经完成了几乎可以工作的 tryexcept,它显示了我希望用户看到的消息,但它也返回了 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()

【问题讨论】:

    标签: python exception exception-handling runtime


    【解决方案1】:

    你可以这样做:

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

    编辑:“当它遇到异常时如何阻止它执行?”

    您可以在@sabujhassan 提到的wget() 中拥有tryexcept,或者您可以在捕获异常时退出:

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

    编辑2:“是否可以循环程序,例如当没有用户输入时,只要求用户输入网址?” 是的,您可以简单地将其覆盖在无限 while 循环中,并在选择正确的值时中断。

    while True:
        try:
            # Your logic ...
            break
        except:
            print 'No input or wrong url format usage: http://wwww.domainname.com '
            print 'Try again!'
    

    【讨论】:

    • 不起作用,仍然显示回溯。发生了什么,当它遇到异常时,它仍然执行 def wget() 函数。遇到异常时如何阻止它执行?
    • @user3034404 您是否尝试在捕获异常时退出?
    • 我想要做的不是显示 Traceback。我只想打印我的自定义错误消息。
    • @user3034404 我相信您想打印自定义错误消息并退出。我已经编辑了我的答案。它应该有效并且应该是正确的方法。
    • 是否可以循环程序,例如。当没有用户输入时,一直要求用户输入网址?
    【解决方案2】:

    除了函数 wget()ma​​in() 外,都使用 try。例如:

    def wget(webpage):
        try:
            print '[*] Fetching webpage...\n'
            page = webpage.read()
            return page    
        except:
            print "exception!"
    

    【讨论】:

      【解决方案3】:

      您执行了最初的 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)
      

      【讨论】:

        【解决方案4】:

        试试这个(替换第 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 个空格规则,我一直不得不替换空格键)

        【讨论】:

        • 在尝试运行程序时出现 IndexError: list index out of range
        • 忘记检查参数是否通过
        猜你喜欢
        • 1970-01-01
        • 2020-06-15
        • 2013-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-25
        • 2015-08-28
        • 2015-06-11
        相关资源
        最近更新 更多