Решил потестить свои навыки понимания рекурсии на примере самописного скриптика на Python for s60.
Но столкнулся с какой-то странной проблемой: при запуске скрипта идёт сканирование всех дисков (C:, D:, E:, Z:), но при сканировании диска E: скрипт просто напросто вылетает, вместе с IDE.
В качестве IDE используется kaapython последней на сегодняшний день версии.
В то же время запущена последняя Opera Mobile с открытым локально .mht файликом порядка 500Кб.
В последнем Ped вообще какая-то ошибка кодировок, поэтому не гонял.
Так же, при обычном запуске из PythonShell - тоже ошибка кодировки. Но это не суть.
Ну и да, Python у меня установлен 1.4.5 Final.
Привожу полный код скрипта, а так же упрощённую версию:
Полная версия для дебага:
# -*- coding: utf-8 -*-
# Рабочий скрипт рекурсивного
# прохода папок по указанному пути.
# В подсчете не учитывает (пока) только
# исходный путь.
import os, e32, sys
sys.setrecursionlimit(5000)
#drives = e32.drive_list()
drives = [u'E:']
stat = {
# 'drives': 0,
'dirs': 0,
'files': 0,
'others': 0,
}
level = 0
def rec(pt):
global dirs, level
level += 1
if level > 10:
u'WARNING: deep recursion level:', level
names = os.listdir(pt)
for name in names:
d = os.path.join(pt, unicode(name))
if os.path.isdir(d):
stat['dirs'] += 1
rec(d)
elif os.path.isfile(d):
stat['files'] += 1
else:
stat['others'] += 1
level -= 1
for dr in drives:
for k, v in stat.items():
print k.capitalize() + u':', v
print u'Scanning', dr + u'...'
rec(dr)
import os
level = 0
def rec(pt):
global level
level += 1
print level
names = os.listdir(pt)
for name in names:
d = os.path.join(pt, unicode(name))
if os.path.isdir(d):
rec(d)
level -= 1
rec(u'E:')