我已經看過類似的問題,所以我不認爲任何東西與此類似。但是,也許我錯了,這就是爲什麼我在這裏。這是在Mac上。 Python版本是2.7.6。NameError:全局名稱'isdigit'未定義
嘗試獲取單詞中的音節,查找一行中的所有單詞。
寫了模塊 'wordfunc.py' 其中有這樣的:
from nltk.corpus import cmudict as cmud
import nltk
d=cmud.dict()
def parse_line(line):
return nltk.word_tokenize(line)
def ns(word):
if word.lower() not in d:
return -1
else:
# print lcase
return [len(list(y for y in x if isdigit(y[-1]))) for x in d[word.lower()]]
和主要程序test.py有這樣的:
#!/usr/bin/env python
import wordfunc
import sys
if len(sys.argv) == 1:
print "No arguments"
exit()
## read a stream first
try:
with open(sys.argv[1]) as entrywound:
for line in entrywound:
words = wordfunc.parse_line(line)
## print word and number of syllables per word
for w in words:
print 'Word: '+w
print 'Sysllables: '
print wordfunc.ns(w)
except IOError:
print "Unable to open file. Exiting!"
exit(1)
當我與一個文件運行這個程序,我得到這個錯誤:
./test.py /tmp/test
Word: quick
Sysllables:
Traceback (most recent call last):
File "./test.py", line 19, in <module>
print wordfunc.ns(w)
File "/Users/sid/Cave/scripts/wordfunc.py", line 14, in ns
return [len(list(y for y in x if isdigit(y[-1]))) for x in d[word.lower()]]
File "/Users/sid/Cave/scripts/wordfunc.py", line 14, in <genexpr>
return [len(list(y for y in x if isdigit(y[-1]))) for x in d[word.lower()]]
NameError: global name 'isdigit' is not defined
我在做什麼錯?我的意思是,isdigit
已經不是全球性的功能嗎?
謝謝。這就像一個魅力。 isdigit()的用法在python的某個時候是否改變過,或者它總是這樣嗎? – 2014-11-22 05:25:08
@SidCarter我不記得有這樣的事情了,自從2.x早期開始我就一直在使用Python,但是人類的記憶是錯誤的,機器的記憶很難查詢(特別是當它們產生類似於你的問題時) 。 – 2014-11-22 05:30:39
我問,因爲我在nltk中使用這個用法。 一個例子 - https://groups.google.com/forum/#!msg/nltk-users/mCOh_u7V8_I/HsBNcLYM54EJ 謝謝,無論哪種方式。 – 2014-11-22 05:33:40