2014-11-22 291 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()

相關問題