2016-04-25 16 views
0
for printJobString in logfile: 
    userRegex = re.search('(\suser:\s)(.+?)(\sprinter:\s)', printJobString) 
    if userRegex: 
     userString = userRegex.group(2) 
     pagesInt = int(re.search('(\spages:\s)(.+?)(\scode:\s)', printJobString).group(2)) 

以上是我的代碼,當我運行這個節目,我最終得到的模塊中,Regexpr在python

Traceback (most recent call last): 
    File "C:\Users\brandon\Desktop\project3\project3\pages.py", line 45, in <module> 
    log2hist("log") # version 2. 
    File "C:\Users\brandon\Desktop\project3\project3\pages.py", line 29, in log2hist 
    pagesInt = int(re.search('(\spages:\s)(.+?)(\scode:\s)', printJobString).group(2)) 
AttributeError: 'NoneType' object has no attribute 'group' 

我知道這個錯誤意味着搜索將返回None,但我不知道如何處理這種情況。任何幫助將不勝感激,非常新的python,仍然學習基礎。

我正在編寫一個應該打印出用戶頁數的程序。 180.186.109.129 code:knh user:luis printer:core 2 pages:32 是一個目標字符串,我的python文件試圖創建一個數據文件,每個用戶都有一行,幷包含打印的總頁數

+1

這是一個正則表達式問題,而不是Python問題。您應該在http://regexr.com/上調試您的正則表達式,或者使用正則表達式模式和示例目標字符串發佈問題。 –

+0

編輯試圖在我的目標中更清楚@ap – bkennedy

+0

@ap我試圖使用regexr.com,但我認爲我用來搜索「user:」「printer:」文件的格式是正確的,我我不確定我在這裏做錯了什麼,據我所知,它正在掃描那些詞並忽略空白。我的思維過程顯然是錯誤的,因爲它不是在做我認爲應該做的事 – bkennedy

回答

2

它發生的原因是因爲你的正則表達式沒有找到任何東西,返回None

re.search('(\spages:\s)(.+?)(\scode:\s)') returns None 

使用if語句來測試,如果你嘗試組之前,它不是無

for printJobString in logfile: 
    userRegex = re.search('(\suser:\s)(.+?)(\sprinter:\s)', printJobString) 
    if userRegex: 
     userString = userRegex.group(2) 
     pagesInt = re.search('(\spages:\s)(.+?)(\scode:\s)', printJobString) 

     if pagesInt: 
      pagesInt = int(pageInts.group(2)) 
+0

我在我的代碼中添加了這個錯誤,但是我收到錯誤** Traceback(最近調用最後一個): 文件「C:\ Users \ brandon \ Desktop \ project3 \ project3 \ pages.py」,第48行,在 log2hist (「log」)#version 2. 如果pageInt: UnboundLocalError:分配之前引用的局部變量'pageInt',則在log2hist中爲第30行,文件爲「C:\ Users \ brandon \ Desktop \ project3 \ project3 \ pages.py」 ** @danidee – bkennedy

+0

@bkennedy因爲你的'如果userRegex'沒有eval爲true,你的'pagesInt'永遠不會被分配;那麼,當你在下一個「if」中檢查它時,它不在那裏。 –