NameError:未定义全局名称“isdigit”

时间:2014-11-22 05:14:49

标签: python macos python-2.7 nltk

我在SO上看过类似的问题,但我认为没有任何东西与此类似。但是,也许我错了,这就是我在这里的原因。这是在Mac上。 Python版本是2.7.6。

尝试获取单词中的所有单词中的音节。

写了一个模块' 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已经是一个全球性的职能?

2 个答案:

答案 0 :(得分:2)

不,这是一种字符串方法。我怀疑你想要y[-1].isdigit()

答案 1 :(得分:0)

isdigit()是字符串上的方法,如下所示:'3'.isdigit()

尝试将代码更改为y[-1].isdigit()