Some HAT...

= Анабар.ru => Python-форумы => Язык программирования Python => сообщение 901
| Вход | Регистрация
нет
фото
Автор:  xman
Дата:  10-Jul-2006 10:33 (gmt = -3)
E-mail:  xman85@inbox.ru

Вопрос о глобальных и локалных переменных в функциях.

Объявляю пару глобальных переменных, хочу юзать их в ф-ии, пишу там, что они глобальные, получаю:

 1  ##################################################################
 2  
 3  Time    2006/07/10 09:48:21.052 GMT+4
 4  User Name (User Id)    Anonymous User (None)
 5  Request URL    http://www.site.ru/analyser/ws_test_2
 6  Exception Type    NameError
 7  Exception Value    global name 'lnks' is not defined
 8  
 9  Traceback (innermost last): 
10  Module ZPublisher.Publish, line 101, in publish
11  Module ZPublisher.mapply, line 88, in mapply
12  Module ZPublisher.Publish, line 39, in call_object
13  Module OFS.DTMLMethod, line 144, in __call__
14  <DTMLMethod instance at 43cd6da0>
15  URL: http://www.site.ru/analyser/ws_test_2/manage_main
16  Physical Path:/analyser/ws_test_2
17  Module DocumentTemplate.DT_String, line 474, in __call__
18  Module DocumentTemplate.DT_With, line 76, in render
19  Module DocumentTemplate.DT_With, line 76, in render
20  Module DocumentTemplate.DT_In, line 626, in renderwob
21  Module DocumentTemplate.DT_Util, line 198, in eval
22  __traceback_info__: whole_site_2
23  Module <string>, line 1, in <expression>
24  Module Shared.DC.Scripts.Bindings, line 306, in __call__
25  Module Shared.DC.Scripts.Bindings, line 343, in _bindAndExec
26  Module Products.PythonScripts.PythonScript, line 323, in _exec
27  Module None, line 75, in whole_site_2
28  <PythonScript at /analyser/whole_site_2 used for /expert/rus>
29  Line 75
30  Module None, line 63, in recursive_traverse
31  <PythonScript at /analyser/whole_site_2 used for /expert/rus>
32  Line 63
33  NameError: global name 'lnks' is not defined 
34  
35  Display traceback as text
36  
37  ##################################################################

Почему они не оъявились глобальными? Я пробовал передавать их в ф-ю параметрами, но после выхода из ф-ии они восстанавливают свои прежние значения, и я получаю бесконечный цикл. Подскажите плз, где грабли?

Вот код скрипта:

 1  #############################################################################################################
 2  
 3  # вот эти переменные мне нужны глобальными
 4  
 5  watchdog = 0
 6  lnks = []
 7  level = 0
 8  
 9  filter_for_meta_types = ['ZMetodIssue','ZMetodContentFolder']
10  items_to_show = 5000
11  
12  
13  def parse_property(property = '', abs_url = '') :
14   
15   if property != '' :
16  
17    dirty_links = []
18    links = []
19  
20    # на каком сайте находимся?
21    ac_url = abs_url[abs_url.find('http://'):abs_url.find('.ru')]
22  
23    # убьем все комментарии
24    while property.find('<!--') != -1:
25     comms = property[property.find('<!--'):property.find('-->')+3]
26     property = property.replace(comms,'')
27  
28    # вырежем все ссылки в массив dirty_links
29    while property.find('<a') != -1:
30     link = property[property.find('<a'):property.find('</a>')+4]
31     dirty_links.append(link)
32     property = property.replace(link,'')
33  
34    while property.find('<A') != -1:
35     link = property[property.find('<A'):property.find('</A>')+4]
36     dirty_links.append(link)
37     property = property.replace(link,'')
38  
39    # во всех обнаруженных ссылках заменим [url] на адрес сайта и "очищенные" ссылки сохраним в links
40    for link in dirty_links:
41     links.append(link.replace('[url]', ac_url + '.ru/'))
42  
43    # добавим ссылку для исправления обьекта
44    links.append('<a href="'+ abs_url + '/admin">исправить</a>')
45  
46    # возвратим массив ссылок
47    return links
48   
49   else : return []
50  
51  def recursive_traverse(parent):
52   
53   # вот объявляю их глобальными
54   global lnks, watchdog, level
55  
56   items = parent.objectItems(filter_for_meta_types)
57  
58   for item in items:
59  
60    itemname = item[0]
61    item = item[1]
62      
63    if item.visible=='on' :
64  
65     #lnks += parse_property(item.shortstory, item.absolute_url())
66     lnks.append(str(item.getId()))
67  
68     if item.meta_type == 'ZMetodContentFolder':
69      watchdog += 1
70      if watchdog > items_to_show: break
71      level += 1
72      lnks += recursive_traverse(parent[itemname])
73  
74   return lnks
75  
76  lnks += recursive_traverse(context)
77  
78  return lnks
79  
80  #############################################################################################################
81  



все сообщения ветви:
  • 901 Вопрос о глобальных и локалных переменных в функциях.  xman  | 10-Jul-2006, 10:33 | просмотров: 4998   <==

О том как (правильно) написать сообщение...

Написать ответ

* Ник    
E-mail   Получать ответы  
Ссылка (URL)   мин. уровень чтения  
Картинка (URL)   мин. уровень ответа  
* Тема ответа  
Текст сообщения (можно не заполнять)

Время генерации страницы в секундах: 0.496