2015-06-21 20 views
5

मैं selenium.webDriver के साथ किसी वेबपृष्ठ पर किसी खोज बॉक्स से कुछ सामग्री पुनर्प्राप्त करने के लिए रेगेक्स का उपयोग करता हूं।पायथन रेगेक्स विशेषताएँ: 'noneType' ऑब्जेक्ट में कोई विशेषता नहीं है 'समूह'

searchbox = driver.find_element_by_class_name("searchbox") 
searchbox_result = re.match(r"^.*(?=(\())", searchbox).group() 

कोड तब तक काम करता है जब तक खोज बॉक्स रेगेक्स से मेल खाने वाले नतीजे लौटाता है। लेकिन अगर खोज बॉक्स स्ट्रिंग "No results" साथ उत्तर मैं त्रुटि मिलती है:

AttributeError: 'NoneType' object has no attribute 'group'

मैं कैसे स्क्रिप्ट "No results" स्थिति से निपटने कर सकते हैं?

उत्तर

6

मैं इस समाधान को समझने में कामयाब रहा, इसे उपेक्षित के साथ करना पड़ा जी group() उस स्थिति के लिए जहां सर्चबॉक्स उत्तर "No results" है और इस प्रकार रेगेक्स से मेल नहीं खाता है।

try: 
    searchbox_result = re.match("^.*(?=(\())", searchbox.group() 
except AttributeError: 
    searchbox_result = re.match("^.*(?=(\())", searchbox) 

या बस:

try: 
    searchbox_result = re.match("^.*(?=(\())", searchbox.group() 
except: 
    searchbox_result = None 
3

जब आप ऐसा करेंगे

re.match("^.*(?=(\())", search_result.text) 

फिर अगर कोई मुकाबला नहीं मिला था, None लौटा दी जाएगी:

Return None if the string does not match the pattern; note that this is different from a zero-length match.

आपको जांचना चाहिए कि आप एक परिणाम मिला इससे पहले कि आप इस पर group लागू होते हैं:

res = re.match("^.*(?=(\())", search_result.text) 
if res: 
    # ... 
+0

धन्यवाद, आप कोड की एक अधिक सटीक उदाहरण दे सकते हैं? मैं मूल रूप से इसे 'res' लिखना चाहता हूं, अगर इसे कुछ भी नहीं मिलता है। या वैकल्पिक रूप से, 'छोड़कर' का उपयोग करते हुए 'पास'। – Winterflags

+0

@ विंटरफ्लैग आप 'रेस कोई नहीं है' की जांच कर सकते हैं, यदि यह है, तो इसे '' '' 'में बदलें। – Maroun

+0

@ विंटरफ्लैग यह भी ध्यान दें कि आपका रेगेक्स लालची है, यह "स्ट्रिंग" एबीसी (डीईपी 'में "एबीसी (डीफ़" से मेल खाता है (' क्या आप चाहते हैं? – Maroun

संबंधित मुद्दे

 संबंधित मुद्दे