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