2012-07-03 13 views
9

मेरे पास निम्न स्क्रिप्ट (नीचे) है। जो यूआरएल का स्टेटस कोड वापस कर देगा। यह एक फाइल के माध्यम से loops और प्रत्येक मेजबान से कनेक्ट करने की कोशिश करता है। केवल समस्या यह है कि यह अपवाद तक पहुंचने पर स्पष्ट रूप से लूपिंग बंद कर देता है।पायथन: अपवाद के बाद लूपिंग जारी रखें

मैंने लूप में इसे कैसे रखा है, लेकिन इसका कोई फायदा नहीं हुआ है। कोई विचार?

import urllib 
import sys 
import time 

hostsFile = "webHosts.txt" 


try: 
    f = file(hostsFile) 
    while True: 
     line = f.readline().strip() 
     epoch = time.time() 
     epoch = str(epoch) 
     if len(line) == 0: 
      break 
     conn = urllib.urlopen(line) 
     print epoch + ": Connection successful, status code for " + line + " is " + str(conn.code) + "\n" 
except IOError: 
    epoch = time.time() 
    epoch = str(epoch) 
    print epoch + ": Connection unsuccessful, unable to connect to server, potential routing issues\n" 
    sys.exit() 
else: 
    f.close() 

संपादित करें:

मैं इस के साथ मतलब समय में किसी भी मुद्दे इस के साथ आए हैं? (मैं अभी भी सीख रहा हूँ: पी) ...

f = file(hostsFile) 
while True: 
    line = f.readline().strip() 
    epoch = time.time() 
    epoch = str(epoch) 
    if len(line) == 0: 
     break 
    try: 
     conn = urllib.urlopen(line) 
     print epoch + ": Connection successful, status code for " + line + " is " + str(conn.code) + "\n" 
    except IOError: 
     print epoch + "connection unsuccessful" 

धन्यवाद,

MHibbin

+1

क्या आपने प्रयास का उपयोग करके अपवाद को पकड़ने की कोशिश की है ... ब्लॉक को छोड़कर, और फिर चेतावनी और जारी है? –

+0

@ एलेक्स विल्सन, मेरे पास एक और खेल था ... और मेरा प्रश्न बदल गया ... क्या यह तुम्हारा मतलब है? – MHibbin

+1

यह वास्तव में है। अच्छी तरह से किया ... –

उत्तर

11

आप इसे उठाए गए अपवाद को संभाल सकते हैं। साथ ही, फ़ाइलों को खोलते समय एक संदर्भ प्रबंधक का उपयोग करें, यह सरल कोड बनाता है।

with open(hostsFile, 'r') as f: 
    for line in f: 
     line = line.strip() 
     if not line: 
      continue 

     epoch = str(time.time()) 

     try: 
      conn = urllib.urlopen(line) 
      print epoch + ": Connection successful, status code for " + line + " is " + str(conn.code) + "\n" 
     except IOError: 
      print epoch + ": Connection unsuccessful, unable to connect to server, potential routing issues\n" 
+0

मैं प्रश्न पोस्ट करने के ठीक बाद उसी निष्कर्ष पर आया था। :-) मैंने जो किया है उसकी पुष्टि करने के लिए धन्यवाद। – MHibbin

+3

'एफ में लाइन के लिए' शायद थोड़ी देर के लूप से बेहतर है। – georg

+0

बिल्कुल, और यदि आप न्यूलाइन को अलग करने से पहले खाली स्ट्रिंग (लाइन == '' :) के खिलाफ प्रत्येक पंक्ति का परीक्षण करते हैं (\ n) तो आप समय-समय पर बाहर निकलने के बिना स्रोत फ़ाइल में रिक्त रेखाएं संभाल सकते हैं। – aychedee

4

आप urllib.urlopen(line) द्वारा उठाए गए अपवाद, कुछ इस तरह संभाल करने की जरूरत है।

try: 
    f = file(hostsFile) 
    while True: 
     line = f.readline().strip() 
     epoch = time.time() 
     epoch = str(epoch) 
     if len(line) == 0: 
      break 
     try: 
      conn = urllib.urlopen(line) 
     except IOError: 
      print "Exception occured" 
      pass 
except IOError: 
    epoch = time.time() 
    epoch = str(epoch) 
    print epoch + ": Connection unsuccessful, unable to connect to server, potential routing issues\n" 
    sys.exit() 
else: 
    f.close() 
+0

उत्तर के लिए धन्यवाद। मैंने अपने प्रश्न को एक संभावित समाधान के साथ संपादित किया है जो मुझे मध्य समय में मिला था। – MHibbin

0

आप इस तरह कुछ के रूप में जबकि लूप के अंदर अपवाद को पकड़ने का प्रयास कर सकते हैं।

try: 
    f = file(hostsFile) 
    while True: 
     line = f.readline().strip() 
     epoch = time.time() 
     epoch = str(epoch) 
     if len(line) == 0: 
      break 
     try: 
      conn = urllib.urlopen(line) 
      print epoch + ": Connection successful, status code for " + line + " is " + str(conn.code) + "\n" 
     except: 
      epoch = time.time() 
      epoch = str(epoch) 
      print epoch + ": Connection unsuccessful, unable to connect to server, potential routing issues\n" 
except IOError: 
    pass 
else: 
    f.close()