2014-11-22 142 views
0

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

回答

2

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

+0

谢谢。这就像一个魅力。 isdigit()的用法在python的某个时候是否改变过,或者它总是这样吗? – 2014-11-22 05:25:08

+0

@SidCarter我不记得有这样的事情了,自从2.x早期开始我就一直在使用Python,但是人类的记忆是错误的,机器的记忆很难查询(特别是当它们产生类似于你的问题时) 。 – 2014-11-22 05:30:39

+0

我问,因为我在nltk中使用这个用法。 一个例子 - https://groups.google.com/forum/#!msg/nltk-users/mCOh_u7V8_I/HsBNcLYM54EJ 谢谢,无论哪种方式。 – 2014-11-22 05:33:40

0

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

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

相关问题