Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/64: Рейтинг темы: голосов - 64, средняя оценка - 4.95
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
1

Как узнать имя исключения в Python , для объекта webdriver, для секции try/except

07.08.2017, 02:27. Показов 12279. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем здравствовать и болеть )))
Ребят
--1-- как узнать конкретное имя исключения для объекта?
--2-- как пустить трафик от прокси №1 через прокси №2
в моем случае от проксик №1 - browsermobproxy , через проксик №2 - burpsuite

само исключение хочу поставить на "событие" - firefox.close(), когда скрипт запускаю , скрипт запускает браузер firefox и если браузер сразу закрыть то вываливается Traceback :

[I]Traceback (most recent call last):
File "ffstart.py", line 126, in <module>
A.start_firefox_url('http://www.google.ru')
File "ffstart.py", line 89, in start_firefox_url
self.driver.get(self.url)
File "/home/sirius/project/python_sir/SBBs_sdo/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 268, in get
self.execute(Command.GET, {'url': url})
File "/home/sirius/project/python_sir/SBBs_sdo/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute
self.error_handler.check_response(response)
File "/home/sirius/project/python_sir/SBBs_sdo/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Failed to decode response from marionette
[/I]


сам код.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/env python3
import sys
import requests
from selenium.webdriver.common.proxy import * # эта бибилиотека нужна ждя пуска мозилы через порт 8080
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from browsermobproxy  import Server, Client # попробую реализовать схему: вызов скрипта ->  firefox->browsermobproxy->burpsuite
 
class BMP_FF():
    """
    Класс для работы браузера Firefox через прокси browsermobproxy
    для перехвата и анализа Get запросов (перехват Get requests not implemention)
    допилить обработку исключения (преждевременного  закрытия Firefox)
    """
 
    try:
        def __init__(self):
            """путь прописывать полностью от home до бинарника который скачивается отдельно не через pip install"""
            self.bmpproxy = Server(r'//home//sirius//project//python_sir//SBBs_sdo//lib//python3.5//site-packages//browsermob-proxy//bin//browsermob-proxy',{'port':8082})# указываю  путь к  бинарнику и на каком порту слушать трафик
            self.bmpproxy.start() # start browsermobproxy
            self.bmp_port = self.bmpproxy.create_proxy() # save № open port browsermobproxy
            self.resp = requests.post('http://localhost:8082/proxy',{})# отправляю запрос для получения №порта на котором поднял проксик browsermobproxy
            port = self.resp.json()['port']
            self.port_ff_net = "localhost :" + str(port) 
            self.proxy_my_ff = Proxy({
                'proxyType' : ProxyType.MANUAL,
                'httpProxy' : self.port_ff_net,
                'ftpProxy'  : self.port_ff_net,
                'sslProxy'  : self.port_ff_net,
                'socksProxy': self.port_ff_net,
                'noProxy'   : ''
            })
            self.profile = webdriver.FirefoxProfile()
            self.profile.set_preference("network.proxy.type" , 1)
            self.profile.set_preference("network.proxy.http" , "localhost")
            self.profile.set_preference("network.proxy.http_port" , self.bmp_port)
            self.profile.set_proxy(self.proxy_my_ff)
         
        """метод вызова браузера с заданными  настройками прокси в
        методе  __init__ и переход на заданный адрес"""
        def start_firefox_url(self,site_url): #site_url адрес нужного сайта
            self.url = site_url
            self.driver = webdriver.Firefox(self.profile)
            self.driver.get(self.url)
            sys.stdout.write('Открылся порт = ' + str(self.resp.json()['port']) + '\n' )
 
        """метод отстановки browsermobproxy"""
        def bmp_stop(self):
            self.bmpproxy.stop()
 
    except Exception as msg:
        sys.stdout.write(msg[2])
        sys.stdout.write('Что то пошло не так в объекте BMP_FF' + '\n' )
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2017, 02:27
Ответы с готовыми решениями:

Selenium webdriver как узнать имя фрейма
Нужная мне страница после нажатия кнопки AJAX-ом подгружает данные. Если в Хроме на эти данные...

Как узнать имя объекта?
Сабж. у меня динамические едиты и событие к ним OnChange одно хочу сделать, но без имени объекта...

Исключения и Имя объекта
Сейчас работаю с классами и возник вопрос, есть какой-то шаблонный класс template&lt;typename T&gt; class...

Как узнать имя внедренного объекта?
Внедряю в документ Word объект VBA следующим кодом: ActiveDocument.ToggleFormsDesign ...

Как узнать имя конструктора объекта
Всем доброго времени суток. Продолжаю разбираться с ООП в JS. Возникла проблема: хочу написать...

15
Просто Лис
Эксперт Python
5964 / 3727 / 1097
Регистрация: 17.05.2012
Сообщений: 10,785
Записей в блоге: 9
07.08.2017, 06:43 2
Python
1
selenium.common.exceptions.WebDriverException
Не?
Python
1
2
3
4
5
6
from selenium.common.exceptions import WebDriverException
 
try:
    #...
except WebDriverException as e:
    #...
Добавлено через 1 минуту
И ещё, оборачивайте блоками try-except методы, а не вообще всё. Понимаю, питон гибкий, всё стерпит...
1
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
08.08.2017, 02:34  [ТС] 3
Спасибо Рыжий Лис за оба совета!!!
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
08.08.2017, 10:12 4
Цитата Сообщение от Orakul Посмотреть сообщение
как узнать конкретное имя исключения для объекта?
Я обычно сначала даю коду упасть в ошибку. Тогда в консоли будет написано исключение.
Вот я его и беру в обработку.

Другой путь - ковырять документацию заранее. Мне этот путь не нравится. И даже если я знаю, какое исключение там будет выброшено, я все равно предпочитаю увидеть это своими глазами, а не строить догадки..
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
08.08.2017, 11:27 5
Kifsif, некоторых исключений при разработке ты можешь не поймать, а на проде все рухнет. Выводы делать не буду и так все очевидно.
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
08.08.2017, 11:50 6
Цитата Сообщение от alex925 Посмотреть сообщение
Kifsif, некоторых исключений при разработке ты можешь не поймать, а на проде все рухнет.
Если при разработке мы о чем-то не подумали, то в продакшене - да выскочит ошибка. Это, во-первых, неизбежно. Ошибки есть у всех. Баги правятся, жизнь продолжается.

Во-вторых - да, я хочу, при разработке видеть, как оно упало. Потом принять к сведению и написать обработчик. Мне так нравится. И не только мне. Вон TDD есть - им тоже нравится посмотреть сперва, как оно упало, а потом двигаться дальше.

Какие выводы можно сделать из этого - вот тут я вообще не понял, о чем комментарий.
Практичный способ. В чем его порок?

Это скриптовый язык - запустил, проверил. Видишь возможное исключение, дал ему сначала взорваться, потом обработал.
На компилируемых могут быть другие стратегии, я не знаю. Компиляция долго происходить может. Я не программировал профессионально на компилируемых, а студенческие работы не в счет.
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
08.08.2017, 13:04 7
Цитата Сообщение от Kifsif Посмотреть сообщение
Во-вторых - да, я хочу, при разработке видеть, как оно упало
Веди логи и все, можешь сохранять полный traceback в лог.
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
08.08.2017, 13:47 8
Цитата Сообщение от alex925 Посмотреть сообщение
Веди логи и все, можешь сохранять полный traceback в лог.
Я с такой техникой не знаком. Зачем логи в разработке на Питоне?
В разработке мы оперируем срочной информацией. Вот оно упало - посмотрели, организовали обработчик исключений.

А логи - это на случай, если когда-то потом нам вдруг понадобится что-то. Так вот, при разработке-то оно нам может понадобиться только сейчас. И более никогда - потому что мы проехали и уже не хотим вспоминать, что мы кодили даже час назад.

В общем, что-то как-то - я уже утратил нить беседы. Все что ниже - это не троллинг, а попытка понять. Причина: alex925, я очень ценю Ваши сообщения. Если бы кто другой написал, я бы мимо ушей пропустил вообще. Но т.к. это написали Вы, я пытаюсь разобраться. Но мои попытки напоминают натягивание совы на глобус. Но давайте все-таки попробуем разобраться, как я Вас понял.

Вот мне в бытность студентом репетитор по Java говорил - чтобы быть продуктивным, кодишь до обеда, компилируешься, кодишь до вечера, компилируешься. Если будешь постоянно компилироваться, то времени на программирование не останется. Но у него-то был компилируемый язык. Т.е. - да, он кодил до обеда, и только потом ловил свои ошибки.

А еще давным давно мужики кодили на бумажке. Потом отдавали оператору. Оператор вбивал на перфокарты. Потом программист ждал освобождения машинного времени. Его перфокарты прогоняли. Он приходил. А там написано: "Ошибка компиляции". И он уходил думать. И думал опять на бумажке, опять наборщик и т.п.

Но это случаи, когда люди программируют в своих реалиях. А на Питоне реалии таковы, что можно быстро запуститься, дать упасть в ошибку, написать обработчик, опять запуститься и посмотреть, что ошибка обработана корректно.

Давайте все-таки определимся, почему Вы не хотите дать упасть в ошибку? Из этиж же самых соображений, что продуктивность программиста снизится из-за постоянных запусков?

Но как она может снизиться. Это же не компиляция. А на узнавание исключения в документации Вы все равно время потратите.

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

И только потом заглянул в лог и узнал, какие исключения возникали. Но анализ лога не будет простым. В отличие от исключения, которое застрелило программу. И какая должна быть квалификация у программиста для такого.

В общем, был бы признателен за более подробный комментарий: почему вы против того, чтобы давать упасть, а только потом обрабатывать исключение.
0
Эксперт Python
5434 / 3857 / 1215
Регистрация: 28.10.2013
Сообщений: 9,553
Записей в блоге: 1
08.08.2017, 14:55 9
Самый глупый способ поймать исключение, который я когда-либо видел:
Python
1
2
3
4
5
6
7
8
try:
    def test(x,y):
        print(x/y)
 
except Exception as err:
    print('Ошибка никогда не будет перехвачена просто потому, что здесь определение функции, а не вызов:',err)
    
test(1,0)
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
08.08.2017, 19:06 10
Цитата Сообщение от Kifsif Посмотреть сообщение
В общем, был бы признателен за более подробный комментарий: почему вы против того, чтобы давать упасть, а только потом обрабатывать исключение.
Мне если честно лень писать тебе сочинения на n количество страниц, потому что мы говорим про очень глупые и очевидные вещи.
Ты просто представь если бы сбербанк-онлайн (или любая другая крупная система) падала по поводу и без, просто потому, что программист поленился написать нормальный код и не обработал пару-другую исключений. Я думаю ты таким софтом не стал бы пользоваться. Отсюда делай выводы...
0
Эксперт Python
5434 / 3857 / 1215
Регистрация: 28.10.2013
Сообщений: 9,553
Записей в блоге: 1
08.08.2017, 19:21 11
Цитата Сообщение от Kifsif Посмотреть сообщение
И более никогда - потому что мы проехали и уже не хотим вспоминать, что мы кодили даже час назад.
Вот тоже не соглашусь с таким подходом. Свои скрипты я поддерживаю исключительно сам (если б не сам, может и наплевал бы, хотя совесть все равно не позволяет, зараза) и поэтому лог это то, с чем я работаю, когда клиент пишет, что вот "че-то не работает". А чего именно: откуда он знает? Зато знает лог, который клиент мне дает. А если скрипт его не будет вести - с чем мне работать? Запускать скрипт на полный тест? Может уйти много времени пока случится тоже самое, что случилось у клиента.
И совершенно верно что,
Цитата Сообщение от Kifsif Посмотреть сообщение
если при разработке мы о чем-то не подумали, то в продакшене - да выскочит ошибка. Это, во-первых, неизбежно. Ошибки есть у всех.
Но
Цитата Сообщение от Kifsif Посмотреть сообщение
Баги правятся, жизнь продолжается.
И гораздо веселее это происходит, если все залогировано :-).
Как узнать имя исключения в Python , для объекта webdriver, для секции try/except
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
08.08.2017, 21:22 12
Цитата Сообщение от Kifsif Посмотреть сообщение
Если при разработке мы о чем-то не подумали, то в продакшене - да выскочит ошибка.
Да выскочит, но при твоем подходе их будет +100500 и ты даже знать не будешь почему они возникли, а при правильном подходе их будет в разы меньше + можно будет отловить баги с помощью логов.

Цитата Сообщение от Kifsif Посмотреть сообщение
Я с такой техникой не знаком.
Это говорит, что ты мало пока знаешь, это возможности стандартной библиотеки.
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
08.08.2017, 22:28 13
Garry Galler, я говорил про среду разработки, а вы говорите про продуктивную. В продуктивной среде логи ведутся - это понятно.
Но топикстартер спрашивал, как ему в момент разработки узнать, какое нужно обрабатывать исключение.
Речь вообще про webdriver шла.

alex925, зачем лог смотреть в момент разработки? Мы говорим только о разработке. Как тут лог может помочь?

Цитата Сообщение от alex925 Посмотреть сообщение
Мне если честно лень писать тебе сочинения на n количество страниц, потому что мы говорим про очень глупые и очевидные вещи.
А вот и не надо писать. Если методика разработки через анализ логов вне продуктивной среды, то о ней уже написано. Ссылки будет достаточно.
1
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
09.08.2017, 02:07  [ТС] 14
Ребят а как правильнее будет использовать блоки try/except , поделитесь своим опытом!!! Представляю вашему вниманию два варианта обработки исключений один в классе BMP_FF() , другой вариант за классом (подтолкнул комментарий мистера Garry Galler ):
--1--
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/usr/bin/env python3
import sys
import requests
from selenium.webdriver.common.proxy import * # эта бибилиотека нужна ждя пуска мозилы через порт 8080
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import WebDriverException
from browsermobproxy  import Server, Client # попробую реализовать схему скрипт firefox->browsermobproxy->burpsuite
 
 
#====================================================================================
class Config_firefox_start():
    """
    Без этих настроек proxy firefox не запускался 
    через Burpsuite т.к настройки в запускаемой копии 
    firefox настраивались по умолчанию на работу без прокси .
  
    """
    
    def __init__(self,link_url): # link_url при создании обЪекта передаю нужный адрес сайта
        self.url      = link_url # link_url хранит адрес сайта который нужен для перехода
 
        """ настройка вкладки "Сеть" запускаемого браузера"""
        self.myProxy  = "localhost:8081"
        self.proxy_my = Proxy({
        'proxyType'   : ProxyType.MANUAL,
        'httpProxy'   : self.myProxy,
        'ftpProxy'    : self.myProxy,
        'sslProxy'    : self.myProxy,
        'socksProxy'  : self.myProxy,   
        'noProxy'     : '' # set this value as desired
        })
    
        self.profile = webdriver.FirefoxProfile()
        self.profile.set_preference("network.proxy.type", 1)
        self.profile.set_preference("network.proxy.http", "localhost")
        self.profile.set_preference("network.proxy.http_port", 8081)
        self.profile.set_proxy(self.proxy_my)
 
        """Запуск браузера с настроенными настройками(prifile)и переход на сайт"""
        self.driver = webdriver.Firefox(self.profile)
        self.driver.get(self.url)
 
#==================================================================================
 
class BMP_FF():
    """
    Класс для работы браузера Firefox через прокси browsermobproxy
    для перехвата и анализа Get запросов (перехват Get requests not implemention)
    допилить обработку исключения (преждевременного  закрытия Firefox)
    """
 
    def __init__(self):
        """инициализация настроек браузера Firefox для работы через прокси"""
        #путь прописывать полностью от home до бинарника который скачивается отдельно не через pip install
        self.bmpproxy = Server(r'//home//sirius//project//python_sir//SBBs_sdo//lib//python3.5//site-packages//browsermob-proxy//bin//browsermob-proxy',{'port':8082}) # указываю  путь к  бинарнику и на каком порту слушать трафик
        self.bmpproxy.start() # start browsermobproxy
        self.bmp_port = self.bmpproxy.create_proxy() # save № open port на  котором browsermobproxy ловит трафик от firefox
        self.resp = requests.post('http://localhost:8082/proxy',{}) # отправляю запрос для получения №порта на котором поднял проксик browsermobproxy
        port = self.resp.json()['port'] # назначение порта пока не знаю 
        self.port_ff_net = "localhost :" + str(self.bmp_port.port) # получаю строку типа "localhost : 8082"
 
        self.proxy_my_ff = Proxy({
            'proxyType' : ProxyType.MANUAL,
            'httpProxy' : self.port_ff_net,
            'ftpProxy'  : self.port_ff_net,
            'sslProxy'  : self.port_ff_net,
            'socksProxy': self.port_ff_net,
            'noProxy'   : ''
        })
        self.profile = webdriver.FirefoxProfile()
        self.profile.set_preference("network.proxy.type" , 1)
        self.profile.set_preference("network.proxy.http" , "localhost")
        self.profile.set_preference("network.proxy.http_port" , self.bmp_port.port)
        self.profile.set_proxy(self.proxy_my_ff)
 
    def start_firefox_url(self,site_url): #site_url адрес нужного сайта
        """метод вызова браузера с заданными  настройками прокси в
        методе  __init__ и переход на заданный адрес сайта"""
        try:
            self.url = site_url
            self.driver = webdriver.Firefox(self.profile)
            self.driver.get(self.url)
            sys.stdout.write('Открылся порт = ' + str(self.bmp_port.port) + '\n' + 'порт выхода в сеть = ' + str(self.resp.json()['port']) + '\n' )
        except WebDriverException as err:
            print('отработало исключение в методе start_firefox_url')
            self.bmp_stop()
            print('объект уничтожен')
 
    def bmp_stop(self):
        """метод отстановки browsermobproxy но порты почему то заняты остаются ((("""
        self.bmpproxy.stop()
 
 
#======================================================================================
class BMP_FF_getRequests(BMP_FF):
    """
    данный  класс будет уметь обрабатывать Get request
    """
    pass
    
#=====================================================================================
class Working_coockies(Config_firefox_start):
    """
    Этот класс является потомком класса Working_coockies
    класс работает с куками, но проблема в перехвате GET запросов
    для перехвата страницы, которая нужна для парсинга ссылки на 
    страницу авторизации. Для перехвата GET запросов нужно попробовать 
    использовать библиотеку BrowserMob Proxy и тогда схема коннекта 
    скрипта ffstart.py будет выглядеть следующим образом - класс Config_firefox_start()
    будет конектится к прокси BrowserMob Proxy а BrowserMob Prox к Burpsuite для визуального
    отображения процесса. При установке Browsermobproxy импортировать сертификаты ssl в браузер который будет использоваться классом Working_coockies()
    """
    def site_cookie(self):
        try:
            self.cookie = {"name": "key","value":"value" , "path" : "/"}
            self.driver.add_cookie(self.cookie)
            self.all_cookies = self.driver.get_cookies()
            print(self.all_cookies)
        except:
            print('что пошло не так в классе Working_cookies()')
 
 
#===================================================================================
 
 
if __name__ == '__main__':
   
        A = BMP_FF()
        A.start_firefox_url('http://www.google.ru')
        A.bmp_stop()
 
        B = BMP_FF()
        B.start_firefox_url('http://www.vk.com')
        B.bmp_stop()

или

--2--

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
if __name__ == '__main__':
    try:
        A = BMP_FF()
    except WebDriverException as err:
       print ('отработало исключение при создании экземпляра объекта BMP_FF()')
       
    try:
        A.start_firefox_url('http://www.google.ru')
    except WebDriverException as err:
        print ('отработало исключение при вызове метода object.start_firefox_url()')
 
    finally:   
        A.bmp_stop()
        print('объект А уничтожен')
    try:
        B = BMP_FF()
    except WebDriverException as err:
        print('отработало исключение при создании объекта экземпляра BMP_FF')
        
    try:
        B.start_firefox_url('http://www.vk.com')
    except WebDriverException as e:
        print('отработало исключение при вызове метода object.start_firefox_url')
    finally:
        B.bmp_stop()
        print('объект В уничтожен')
В первом варианте исключения отрабатывает экземпляр класса автоматом и не надо дополнительно прописывать try/except в блоке :
Python
1
 if __name__ == '__main__':
во втором варианте try/except уже дописываю ручками для каждого экземпляра , что мне кажется не кашерно . По мне больше нравится первый вариант обработки исключений внутри класса. А как Вы бы поступили , какой вариант бы выбрали?
0
Эксперт Python
5434 / 3857 / 1215
Регистрация: 28.10.2013
Сообщений: 9,553
Записей в блоге: 1
09.08.2017, 15:39 15
Лучший ответ Сообщение было отмечено Orakul как решение

Решение

Цитата Сообщение от Orakul Посмотреть сообщение
один в классе BMP_FF() , другой вариант за классом
Не так выбираете.
try ... except нужно ставить только там и исключительно там, где
1) ожидается наличие исключения(причем определенного типа и тип нужно знать), которое вы как разработчик
2) не можете предотвратить ну прям совсем никак (отключился интернет, нет response от сервера, отсутствует файл для чтения и т.д. )и
3) заворачивать в него исключительно ту строчку\строчки которые и могут вызвать это исключение.
И не пихать в один блок перехвата сразу до кучи все прочее.
Иначе получится так, что одна строчка может вызвать одно исключение, другая другое, а перехватываем мы вообще третье (либо вообще не имеющее отношение к данному блоку - KeyboardInterrupt или SystemExit, почитайте про классы исключений).
Блок try except без указания типа исключения - вот это действительно некошерно. Как минимум, если вы не уверены в названии типа нужного исключения, указывайте хотя бы общий класс исключения Exception.
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
try:
    f = open('qer4t4t')
# перехватываем все исключения, входящие в класс OSError, в том числе ошибки открытия файлов 
except OSError as err:
    print(err)
    sys.exit(int(err.errno)) # завершаем приложение если не указываем дальнейшую логику 
else:
    print(f.read())
    f.close()
 
 
try:
    f = open('qer4t4t')
# перехватываем только исключение отсутствия файла - FileNotFoundError
except FileNotFoundError as err:
    print(err)
    sys.exit(int(err.errno)) # завершаем приложение если не указываем дальнейшую логику 
else:
    print(f.read())
    f.close()
 
 
try:
    f = open('qer4t4t')
    print(f.read())
# перехватываем все подряд (вот такие мы умные :-)), но хорошо что хоть не KeyboardInterrupt или SystemExit
except Exception as err:
    print(err)
    sys.exit(int(err.errno))  
finally:
    f.close()
В последнем случае можно в try except завернуть и более обширный блок, который может вызвать разнотипные исключения. Однако, тогда вы лишаетесь возможности обработать ошибку индивидуально и указать скрипту должную логику работы после исключения.
А просто выводить в stdout сообщение об ошибке и ничего не делать - некошерно вдвойне.
Либо закрывайте приложение (а как оно будет работать если вы просто в stdout сольете "чувак, все плохо" - если данные не были получены корректно; оно все равно упадет там, где эти данные понадобятся коду), либо дайте скрипту новую логику работу. Это и называется обработкой исключений.

Добавлено через 13 минут
P.S.Обработка исключений в Python
И с блоком else в try except нужно быть осторожным: употреблять только если понимаете зачем он нужен.
1
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
09.08.2017, 16:56  [ТС] 16
Garry Galler Благодарю за столь развернутый ответ,узнал больше чем ожидал , а конкретно про sys.exit(int(err.erno)).А то я думаю почему после остановки объекта browsermobproxy - "self.bmp_stop()" - порты остаются занянятыми.
0
09.08.2017, 16:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2017, 16:56
Помогаю со студенческими работами здесь

Как узнать имя экземпляра объекта?
Как изнутри экземпляра объекта узнать имя этого экземпляра, например: function someObject () {...

Как узнать имя UI объекта нажав по нему?
Каким образом можно узнать (допустим) имя UI объекта(картины(лука, который в фотке, ниже)) нажав по...

Как узнать имя объекта, используемого в другом классе
Есть вин приложение, соответственно в program.cs создается объект: Application.Run(new Form1());...

Как узнать имя объекта, на котором произошло последнее событие?
к примеру Button1Click произошел когда нажали на кнопочку, а в лейбл вывести имя объекта - Button1...

Узнать имя функции при ловле исключения
try { Adjacency_Matrix = new std::vector&lt;std::vector&lt;double&gt; &gt;(Number_Nodes,...

Генерация исключения для объекта производного класса
Здравствуйте. Имеется такой код #include &lt;iostream&gt; class A{ public: virtual void ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru