2015-05-12 4 views
0

У меня есть сценарий WIH следующую структуру:NameError: глобальное имя «Ъ» не определен

def func(): 
    bfile=open(b, 'r') 
    cfile=open(c, 'r') 
    dfile=open(d, 'r') 

if __name__=='__main__': 
    if len(sys.argv)==1: 
     print 'guidence' 
     sys.exit() 
    else: 
     opts,args=getopt.getopt(sys.argv,'b:c:d:a') 
     a=False 
     for opt,arg in opts: 
      if opt=='-a': 
       a=True 
      elif opt=='-b': 
       b=arg 
      elif opt=='-c': 
       c=arg 
      elif opt=='-d': 
       d=arg 
     func() 

я запускаю его таким образом:

# python script.py -b file1 -c file1 -d file1 

in func() 
NameError: global name 'b' is not defined 

Я также определить глобальную file1. но нет работы.

Update

Я знаю, где проблема: результат print opts является []. У него нет значений. Почему?

+1

Вы забыли 'def' перед' func() ' – Loocid

+0

Спасибо. Я обновил вопрос – MLSC

+0

Извините, ребята; ясно, я не могу ответить на этот вопрос! Кто-то еще уйдет! –

ответ

0

У вас есть две проблемы.

Во-первых, getopt останавливается, если встречается без возможности. Поскольку sys.argv[0] - это имя скрипта, это не опция, и синтаксический анализ останавливается.
Вы хотите передать sys.argv[1:] в getopt.

Это то, что вызывает print opts, чтобы показать [], а поскольку opts пуст, глобальные переменные никогда не создаются, из-за чего возникает жалоба, из-за которой они не существуют.

Во-вторых, поскольку -a хочет параметр, вам понадобится двоеточие после него.

В целом, это должно работать:

opts, args = getopt.getopt(sys.argv[1:], 'b:c:d:a:') 

Кроме того, вы не должны передавать параметры в глобалов.

0

Вы должны передать имена файлов функции. В вашем случае это должно выглядеть следующим образом:

def func(b, c, d): 
    bfile = open(b, 'r') 
    cfile = open(c, 'r') 
    dfile = open(d, 'r') 

Вы можете назвать его:

b = 'nameB.txt' 
c = 'nameC.txt' 
d = 'nameD.txt' 
func(b, c, d) 
+1

Это не причина ошибки '' NameError''. –

+0

вот проблема вашего asnwer: '' abc.txt'' – MLSC

+0

Это пример работы 'open'. В более раннем редактировании это выглядело так, как будто вы пытались передать файл без файла в качестве имени файла – Dzarafata

Смежные вопросы