1

Тема: Програма не реагує на винятки.

Є програма для пошуку файлів, які містять певне слово, розроблені 2 версії даної програми, але вони виходять з ладу на одному місці:

file_path = open(os.path.join(path, file_name))

Перша версія скрипту:

import os
from os.path import splitext
import fnmatch
 
print ('Производиться поиск ключевого \nслова во всех файлах заданой директории \nкроме расширений *.exe, *.zip, *.xls(x), \n*.dot(x), *.apk, *.dll, *.doc(x), *.ppt(x).')
print ('\n----------------------------------\n')
 
def main():
    path = input('Директория: ')
    while not os.path.isdir(path): #проверка пути
        print('Такого каталога нет')
        path = input('Путь к каталогу: ')
        return
 
    pattern = input('Искаемое слово: ')
 
 
    EXCL_EXTS = ('.exe', '.zip', '.xls(x)', '.dot(x)', '.apk', '.dll', '.doc(x)', '.ppt(x')
 
    for dirpath, dirs, files in os.walk(path):
        for file_name in files:
            fn, fext = splitext(file_name)
            if fext not in EXCL_EXTS:
                continue
            file_path = open(os.path.join(path, file_name), 'r')
            print(os.path.join(path, file_name))
 
if __name__ == '__main__':
    main()
 
def find_word(file_path, pattern):
    new_lines = []
    try:
        with open(file_path, 'rb') as f:
            for line in f:
                if pattern in line:
                    continue
                else:
                    True
    except FileNotFoundError:
        print('Нету прав доступа:', file_path)
        return
    except PermissionError:
        print('Нету прав доступа:', file_path)
        return
    else:
        pass
        return

Друга версія:

import os
from os.path import splitext
import fnmatch
 
print ('Производиться поиск ключевого \nслова во всех файлах заданой директории \nкроме расширений *.exe, *.zip, *.xls(x), \n*.dot(x), *.apk, *.dll, *.doc(x), *.ppt(x).')
print ('\n----------------------------------\n')
 
def main():
    path = input('Директория: ')
    while not os.path.isdir(path): #проверка пути
        print('Такого каталога нет')
        path = input('Путь к каталогу: ')
        return
   
    pattern = input('Искаемое слово: ')
 
 
    EXCL_EXTS = ('.exe', '.zip', '.xls(x)', '.dot(x)', '.apk', '.dll', '.doc(x)', '.ppt(x')
       
    for dirpath, dirs, files in os.walk(path):
        for file_name in files:
            fn, fext = splitext(file_name)
            if fext not in EXCL_EXTS:
                continue
            file_path = open(os.path.join(path, file_name))
            if os.path.isfile(file_path):
                continue
            print(os.path.join(path, file_name))
 
if __name__ == '__main__':
    main()
 
def find_word(file_path, pattern):
    new_lines = []
    try:
        with open(file_path, 'rb') as f:
            for line in f:
                if pattern in line:
                    continue
    except PermissionError:
        print('Нету прав доступа:', file_path)
        return
Post's attachments

Снимок_2015_09_09_08_06_11_561.png 11.06 kb, 173 downloads since 2015-09-09 

2 Востаннє редагувалося koala (09.09.2015 08:14:05)

Re: Програма не реагує на винятки.

Як це "не реагує"? Чудово реагує, у вас он вивід саме від виключної ситуації.
Інша справа, що ви не обробляєте їх. Подивіться, в якому саме рядку стається виняток.

3 Востаннє редагувалося P.Y. (09.09.2015 11:37:54)

Re: Програма не реагує на винятки.

1) Функція, в якій присутні обробники винятків, ні разу не викликається. А оскільки функції в пітоні можна викликати лише після їх оголошення, її можна запустити, хіба що імпортувавши з іншого модуля. Але, в даному випадку, функція висить укінці головного модуля і оголошується вже після того, як усю роботу зроблено (тобто, не робить нічого — можете вважати, що зразу після 29-го чи 31-го рядка текст програми закінчується).
2) Функція, що створює виняток, обробників не містить, і ніде на шляху від запуску програми до цієї функції нема жодного try. Хто має обробляти ці винятки?

4

Re: Програма не реагує на винятки.

Вам варто прислухатися до порад тих, хто вже відповідав, а Я лиш хочу поділитися шматочками текстів з вашої програми ради "поржати":

Производиться поиск

Искаемое слово:

Особливо, це останнє мене вбило )