我已经看过类似的问题,所以我不认为任何东西与此类似。但是,也许我错了,这就是为什么我在这里。这是在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