Я хотел бы обработать исключение в случае, если re.match возвращает ноль - PullRequest
0 голосов
/ 06 февраля 2012

Я написал этот небольшой фрагмент кода:

import csv
import re
import os
fileobj = csv.reader(open('c:\\paths1.csv', 'rb'), delimiter=' ', quotechar='|')
for row in fileobj:
    for x in row:
        with open(x) as f:
            for line in f:
                if re.match('(.*)4.30.1(.*)', line):
                    print 'The version match: '+ line

                    print 'incorrect version'     
        filesize= os.path.getsize(x)


    print 'The file size is :'+ str(filesize) +' bytes';

Я хотел бы, чтобы это было сделано:

Добавьте обработку исключений, насколько я знаю, если методmatch() ничего не совпадает в файле возвращает значение None, однако я не совсем понял, как прочитать это значение, чтобы сделать сравнение и позволить сценарию распечатать (версия не совпадает) ...

У кого-нибудь есть предложения?Также было бы неплохо иметь какую-нибудь ссылку на веб-документацию.

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

Ты на правильном пути.Поскольку логическое значение None равно False, все, что вам нужно сделать, это использовать ветку else в своем коде:

 if re.match('(.*)4.30.1(.*)', line):
            print 'The version match: '+ line
 else:
            print 'incorrect version'

, теперь я почти уверен, что вы хотите соответствовать первому (тот, который содержит номер версии) строки файла или всего файла, так что на всякий случай:

      #first line
      with open(x) as f:
           try:
               #next(f) returns the first line of f, you have to handle the exception in case of empty file
               if re.match('(.*)4.30.1(.*)', next(f))):
                    print 'The version match: '+ line
               else:
                    print 'incorrect version'
           except StopIteration:
               print 'File %s is empty' % s


      #anything
      with open(x) as f:
           if re.match('(.*)4.30.1(.*)', f.read())):
                print 'The version match: '+ line
           else:
                print 'incorrect version'
1 голос
/ 06 февраля 2012
import csv
import re #### don't need it
import os #### don't need it
fileobj = csv.reader(open('c:\\paths1.csv', 'rb'), delimiter=' ', quotechar='|')
for row in fileobj:
    for x in row:
        with open(x) as f:
            for line in f:
                if '4.30.1' in line: #### much simpler than regex
                    print 'The version match: '+ line
                    break
            else: # Yes, a `for` statement can have an `else:` 
                # end of file, "break" doesn't arrive here
                print 'incorrect version' # done ONCE at end of file
0 голосов
/ 06 февраля 2012
>>> st = "hello stackers"
>>> pattern = "users"
>>> if re.match(pattern,st):
...      print "match found"
... else:
...     print "no match found"
...
no match found
>>>

Поскольку re.match() возвращает true, если совпадение найдено. Поэтому просто используйте else statement, если найдено no совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...