Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2 / 2 / 2
Регистрация: 09.12.2012
Сообщений: 24

Самопроизвольное закрытие скрипта

03.11.2016, 10:40. Показов 2897. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть скрипт. Шерстит заголовки групп вконтактика и нужные группы сбрасывает в отдельный файлик.
Выглядит примерно так(см миниатюры). Суть в том, что периодически скрипт завершается(причем на случайной итерации), пришлось создать логирование, чтобы следующий запуск начинался с последней группы. Собственно вопрос, почему может завершаться работа скрипта?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import requests
import re
 
log = open('log.txt', 'r')
log_list = list(log)
last_club = int(log_list[0])
 
 
for i in range(last_club, 30000000):
    # формируем запрос по методу groups.getById
    r = requests.get('http://api.vk.com/method/groups.getById', params={'group_ids': i, 'fields': 'description'})
 
    # Результат как словарь, в целом это не надо, переделать с помощью метода .text
    result = str(r.json())
 
    # регулярными выражениями достаем id группы
    group_id = str(re.findall(r"gid\': \w+", result))
    number_id = re.findall(r"\d+", group_id)
    print(int(number_id[0]))
 
    # записываем LOG - файл
    log = open('log.txt', 'w')
    log.write(number_id[0])
    
    # регулярным выражением ищем строчку "Название группы"
    end_result = re.search(r'Название группы', result)
 
    # если строчка находится, то записываем в файл ссылку
    if end_result:
        print(int(number_id[0]),end_result)
        file = open('club.txt', 'a')
        file.write("vk.com/club" + str(i) + '\n')
        file.close()
 
    log.close()
Миниатюры
Самопроизвольное закрытие скрипта  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.11.2016, 10:40
Ответы с готовыми решениями:

Самопроизвольное закрытие RemoteApp
Появилась такая проблема: У пользователей настроено подключение к 1С через RemoteApp. Все прекрасно работало до сегодняшнего дня. Сегодня...

Самопроизвольное закрытие программ
Не так давно поставил Kubuntu 10.10 и возникли проблемы, сами по себе закрываются приложения, как сразу, так и через неопределенное время,...

Самопроизвольное закрытие папок
Здравствуйте! Извините, если не по теме. Ситуация такая: открываю папку с музыкой (точнее с короткими сэмплами), нажимаю два раза на файл,...

12
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
03.11.2016, 11:04
И что же он, просто молча завершается? Или всё же что-то в консоль напоследок пишет?
0
2 / 2 / 2
Регистрация: 09.12.2012
Сообщений: 24
03.11.2016, 11:19  [ТС]
Black Fregat,
В том то и дело, молча закрывается. Есть предположение, что на стороне ВК, блокируют например.
0
Заблокирован
03.11.2016, 16:12
Скрипт может завершиться без исключения только в случае креша интерпирататора. Поэтому вы можете словить SystemExit.
Пример:
Python
1
2
3
4
5
6
import traceback
try:
    exit()
except SystemExit as e:
    print(e)
    traceback.print_exc() #показать трек исключения
Вывод:
Python
1
2
3
4
5
6
None
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "C:\Python34_x64\lib\_sitebuiltins.py", line 26, in __call__
    raise SystemExit(code)
SystemExit: None
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.11.2016, 17:08
4g63user,
У вас скрипт написан, как будто он запускается в идеальном мире с идеальными (и притом настроенными для максимального удобства ботов) серверами.
Никто так не делает для реальных программ - requests.get всегда оборачивается в try .. except .. else.

1) В try .. except ловим исключения - если обобщенно, то requests.exceptions.RequestException. Если детализировано, то можно отдельно requests.exceptions.ReadTimeout и requests.exceptions.ConnectTimeout и что-нибудь еще.

2) В else проверяем код ответа сервера: если не 200 - думаем, что делать.
Если 200 - проверяем длину ответа. Если 0 (сервера могут и так отвечать:"все в порядке, вот тебе 0 байт") - думаем, что делать.


3) Между запросами (особенно, если их очень много), чтобы сервер как можно позже понял, что работает бот, а не человек - желательно выставлять рандомные паузы.

4) В логике скрипта также стоит предусмотреть перезапуск запроса с теми же данными, если сервер не дал ответа или был exception по таймауту.
В итоге при грамотном логировании работы скрипта - вы получите все ответы на свои вопросы: что, где и почему не работает.

Если вам сервер присылает json - зачем его превращать в текст и парсить регулярками? В resp.json() будет словарь, забирайте оттуда по ключу все, что вам надо.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.11.2016, 17:38
Цитата Сообщение от Garry Galler Посмотреть сообщение
Никто так не делает для реальных программ - requests.get всегда оборачивается в try .. except .. else.
Простой вопрос зачем?

Хотя согласен с тем что у ТС отсутствуют проверки кода ответа сервера.

Python
1
2
3
r = requests.get( ... )
if r.status_code!=200:
   print("Error!");
Или же:
Python
1
2
r = requests.get( ... )
r.raise_for_status() # проверяем и если ошибка бросаем исключение

Цитата Сообщение от 4g63user Посмотреть сообщение
Собственно вопрос, почему может завершаться работа скрипта?
Да мало ли чему?
Вероятно универсальным ответом будет - кривые руки разработчика? Такой ответ устроит?

Лично я предположу что вы не умеете работать с консолью, например что мешает запустить скрипт с перенаправлением вывода в файл? Может вы просто не успеваете зрением заметить выброшенное исключение?
0
2 / 2 / 2
Регистрация: 09.12.2012
Сообщений: 24
03.11.2016, 17:52  [ТС]
Я новичок в Python, поэтому вы все правы. Буду разбираться на основе ваших ответов.
Всем спасибо.
0
03.11.2016, 20:12

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Простой вопрос зачем?
Если вы пишите не для себя, и хотите, чтобы клиент обращался к вам с необработанными исключениями как можно реже, то вы сделаете точно так же.

0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.11.2016, 20:27
Проблема в том что бессмысленное заключение кода в блоки try/catch не является обработкой исключении.
Более того это является ответом на "с какой целью?"
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.11.2016, 22:31
Цитата Сообщение от Avazart Посмотреть сообщение
бессмысленное заключение кода в блоки try/catch не является обработкой исключении.
Я правильно понимаю, что вы существуете в реальности, где интернет-соединение никогда не разрывается?
Завидую. Увы, в моей реальности это не так. И приходится заниматься "бессмысленным" оборачиванием запросов в try..except.
И вы недостаточно внимательно прочитали мой пост адресованный ТС - ему предлагалась конкретная обработка исключений на его выбор. Каких конкретно - зависит уже от задач скрипта в целом и частностей реализации.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.11.2016, 22:40
Цитата Сообщение от Garry Galler Посмотреть сообщение
Я правильно понимаю, что вы существуете в реальности, где интернет-соединение никогда не разрывается?
И ? чем тут поможет "обворачивание" ? Соединение чудом восстановится?
Кроме того я писал выше requests не всегда кидает исключения - необходимо проверять код ответа сервера.

В любом случае это не касается вопроса, ибо у ТС затык с определением проблемы, а не с обработкой разных ситуаций.
Используя правильно консоль или запуская к примеру из IDE Pycharm можно было бы легко определить в чем проблема, а не гадать.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
04.11.2016, 01:58
Цитата Сообщение от Avazart Посмотреть сообщение
requests не всегда кидает исключения - необходимо проверять код ответа сервера.
Какой толк только от проверки кода ответа, если будет выброшено вот это:
Code
1
requests.exceptions.ConnectionError: HTTPConnectionPool
Чтобы это случилось - достаточно отключиться интернету. Либо просто сам сервер скажет, что больше не хочет с вами общаться и - без всяких кодов ответа - разорвет сессию.
Какой толк от ответа 200 ОК, если сервер прислал не то, что мы ожидали (0 байт, проверочную страницу для защиты от ботов и т.д.)? И это тоже нужно проверять.

Цитата Сообщение от Avazart Посмотреть сообщение
чем тут поможет "обворачивание" ? Соединение чудом восстановится?
Тем, что мы будем знать, что именно случилось и в зависимости от логики скрипта выберем нужную стратегию поведения:
1) ждать (бесконечно или по счетчику с лимитом повторов на запросы)
2) залогировать причину и выйти
3) заняться чем-то другим (книгу почитать :-))
а не тупо вылетим в unhandled exception и напугаем пользователя непонятным traceback-ом.
Цитата Сообщение от Avazart Посмотреть сообщение
это не касается вопроса, ибо у ТС затык с определением проблемы
Трудно найти черную кошку в темной комнате. Поэтому об 'освещенности' стоит заботиться заранее.

По моему, это азы web-кодинга - и непонятно с чем тут можно спорить.
0
2 / 2 / 2
Регистрация: 09.12.2012
Сообщений: 24
08.11.2016, 08:03  [ТС]
Кто бы мог подумать. Ошибка такая:
Traceback (most recent call last):
File "D:\Program Files\Parser VK\vk.py", line 19, in <module>
print(int(number_id[0]))
IndexError: list index out of range
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2016, 08:03
Помогаю со студенческими работами здесь

Самопроизвольное закрытие окон на компьютере
Здравствуйте. Последнее время на компьютере при открытии абсолютно любых программ, будь то браузер или что-то еще (даже диспетчер задач)...

Самопроизвольное закрытие файлов в Brackets: OLDI conflicted copy
В приложении Brackets файлы стали самопроизвольно (или от нажатия каких-то обычных клавиш) закрываться, сохраняя файлы с меткой OLDI...

Самопроизвольное закрытие программ, штук 40 процессов калькулятора и прочие приколы
Доброго времени суток. Сам не знаю как, может быть с флешки, не-абы троянчик или червячек а действительно вирус поймал :( в интернете...

Самопроизвольное закрытие окон на ноутбуке + при нажатии определённых клавиш на клавиатуре
Здравствуйте. При работе ноутбука любые открытые окна (браузер, приложения и т.п) через некоторое время закрываются сами. Если открытых...

Тихая установка программ, открывающиеся вкладки в хром и его самопроизвольное закрытие, mystartsearch
Добрый день. Начались устанавливаться программы, открываться вкладки с рекламой в хром, иногда он самопроизвольно закрывается. Брауезр стал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru