2015-09-16 38 views
1

我一直使用re模塊來完成諸如re.match和re.sub這些基本的東西,而且它對我來說一直很好。python模塊重新投擲奇怪AttributeError

突然間,我在嘗試使用基本方法(如match和sub)時收到AttributeError。

下面是一些示例代碼,我提出:

import re 

regex = '^[a-z]{3}' 
r = re.match(regex, 'asd') 
print r 

這裏的堆棧跟蹤:

Traceback (most recent call last): 
    File "te.py", line 4, in <module> 
    r = re.match(regex, 'asd') 
AttributeError: module 're' has no attribute 'match' 

我從來沒有與模塊的問題。我在Python 2.x和3都試過,同樣的錯誤。我對進口產品的工作方式不太瞭解,所以這可能是我犯的一個簡單的錯誤。

感謝

+2

您是否在名爲re.py的相同文件夾中有python代碼?你可以在你的代碼中做一個dir(re)嗎? –

回答

1

刪除與te.py文件相同的目錄中的re.py文件。在命名測試文件時犯了一個錯誤。您的錯誤指出您當前的文件名爲te.py,並且由於t在鍵盤中接近r,這可能解釋了所有內容。

只是爲了證明我的好奇,我在同一個目錄中te.py,保持你的代碼中創建一個空的re.py文件。我也遇到了同樣的錯誤。

+1

當你說可能有文件覆蓋重新模塊時,你是對的。在目錄中,我有一個名爲re.py無論出於何種原因文件。刪除它和.pyc文件,現在工作正常,所以謝謝! – Thrashmaniac89

0

我的猜測是,你得到的東西,你不要指望爲re模塊,您要導入。

也許試試這個:

import re 
print re.__file__ 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.pyc 

,看看你得到的結果是合理的。

+0

我回來的唯一的事情就是re.pyc,這是一個緩存文件,我相信 – Thrashmaniac89

+0

如果你得到了「re.pyc」,那麼我相信,這意味着它是從同一個目錄你正在運行的腳本得到一個重模塊從。這是你所期望的嗎? – mrcheshire

+0

原來,我在同一個目錄下有一個名爲re.py的文件。我刪除了它,現在事情按預期工作。這只是奇怪,因爲我從來沒有過這樣的問題,該文件一直在那裏。 – Thrashmaniac89