14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
|
||||||
1 | ||||||
Как узнать имя исключения в Python , для объекта webdriver, для секции try/except07.08.2017, 02:27. Показов 12279. Ответов 15
Метки нет (Все метки)
Всем здравствовать и болеть )))
Ребят --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] сам код.
0
|
07.08.2017, 02:27 | |
Ответы с готовыми решениями:
15
Selenium webdriver как узнать имя фрейма Как узнать имя объекта? Исключения и Имя объекта Как узнать имя внедренного объекта? Как узнать имя конструктора объекта |
Просто Лис
|
|||||||||||
07.08.2017, 06:43 | 2 | ||||||||||
И ещё, оборачивайте блоками 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 |
Я обычно сначала даю коду упасть в ошибку. Тогда в консоли будет написано исключение.
Вот я его и беру в обработку. Другой путь - ковырять документацию заранее. Мне этот путь не нравится. И даже если я знаю, какое исключение там будет выброшено, я все равно предпочитаю увидеть это своими глазами, а не строить догадки..
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 |
Если при разработке мы о чем-то не подумали, то в продакшене - да выскочит ошибка. Это, во-первых, неизбежно. Ошибки есть у всех. Баги правятся, жизнь продолжается.
Во-вторых - да, я хочу, при разработке видеть, как оно упало. Потом принять к сведению и написать обработчик. Мне так нравится. И не только мне. Вон TDD есть - им тоже нравится посмотреть сперва, как оно упало, а потом двигаться дальше. Какие выводы можно сделать из этого - вот тут я вообще не понял, о чем комментарий. Практичный способ. В чем его порок? Это скриптовый язык - запустил, проверил. Видишь возможное исключение, дал ему сначала взорваться, потом обработал. На компилируемых могут быть другие стратегии, я не знаю. Компиляция долго происходить может. Я не программировал профессионально на компилируемых, а студенческие работы не в счет.
0
|
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
08.08.2017, 13:04 | 7 |
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
08.08.2017, 13:47 | 8 |
Я с такой техникой не знаком. Зачем логи в разработке на Питоне?
В разработке мы оперируем срочной информацией. Вот оно упало - посмотрели, организовали обработчик исключений. А логи - это на случай, если когда-то потом нам вдруг понадобится что-то. Так вот, при разработке-то оно нам может понадобиться только сейчас. И более никогда - потому что мы проехали и уже не хотим вспоминать, что мы кодили даже час назад. В общем, что-то как-то - я уже утратил нить беседы. Все что ниже - это не троллинг, а попытка понять. Причина: alex925, я очень ценю Ваши сообщения. Если бы кто другой написал, я бы мимо ушей пропустил вообще. Но т.к. это написали Вы, я пытаюсь разобраться. Но мои попытки напоминают натягивание совы на глобус. Но давайте все-таки попробуем разобраться, как я Вас понял. Вот мне в бытность студентом репетитор по Java говорил - чтобы быть продуктивным, кодишь до обеда, компилируешься, кодишь до вечера, компилируешься. Если будешь постоянно компилироваться, то времени на программирование не останется. Но у него-то был компилируемый язык. Т.е. - да, он кодил до обеда, и только потом ловил свои ошибки. А еще давным давно мужики кодили на бумажке. Потом отдавали оператору. Оператор вбивал на перфокарты. Потом программист ждал освобождения машинного времени. Его перфокарты прогоняли. Он приходил. А там написано: "Ошибка компиляции". И он уходил думать. И думал опять на бумажке, опять наборщик и т.п. Но это случаи, когда люди программируют в своих реалиях. А на Питоне реалии таковы, что можно быстро запуститься, дать упасть в ошибку, написать обработчик, опять запуститься и посмотреть, что ошибка обработана корректно. Давайте все-таки определимся, почему Вы не хотите дать упасть в ошибку? Из этиж же самых соображений, что продуктивность программиста снизится из-за постоянных запусков? Но как она может снизиться. Это же не компиляция. А на узнавание исключения в документации Вы все равно время потратите. Польза лога может быть только в том случае, если вы кодите несколько часов без единого запуска. Потом запустился - без единой ошибки все прошло, все тесты отработали. Запустился - прощелкал на сайте кнопочики вручную - весь функционал работает без единой ошибки. Потому что если где необработанное исключение - уже не до лога будет. И только потом заглянул в лог и узнал, какие исключения возникали. Но анализ лога не будет простым. В отличие от исключения, которое застрелило программу. И какая должна быть квалификация у программиста для такого. В общем, был бы признателен за более подробный комментарий: почему вы против того, чтобы давать упасть, а только потом обрабатывать исключение.
0
|
08.08.2017, 14:55 | 9 | |||||
Самый глупый способ поймать исключение, который я когда-либо видел:
0
|
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
08.08.2017, 19:06 | 10 |
Мне если честно лень писать тебе сочинения на n количество страниц, потому что мы говорим про очень глупые и очевидные вещи.
Ты просто представь если бы сбербанк-онлайн (или любая другая крупная система) падала по поводу и без, просто потому, что программист поленился написать нормальный код и не обработал пару-другую исключений. Я думаю ты таким софтом не стал бы пользоваться. Отсюда делай выводы...
0
|
08.08.2017, 19:21 | 11 |
Вот тоже не соглашусь с таким подходом. Свои скрипты я поддерживаю исключительно сам (если б не сам, может и наплевал бы, хотя совесть все равно не позволяет, зараза) и поэтому лог это то, с чем я работаю, когда клиент пишет, что вот "че-то не работает". А чего именно: откуда он знает? Зато знает лог, который клиент мне дает. А если скрипт его не будет вести - с чем мне работать? Запускать скрипт на полный тест? Может уйти много времени пока случится тоже самое, что случилось у клиента.
И совершенно верно что, Но И гораздо веселее это происходит, если все залогировано :-).
0
|
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
08.08.2017, 21:22 | 12 |
Да выскочит, но при твоем подходе их будет +100500 и ты даже знать не будешь почему они возникли, а при правильном подходе их будет в разы меньше + можно будет отловить баги с помощью логов.
Это говорит, что ты мало пока знаешь, это возможности стандартной библиотеки.
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
08.08.2017, 22:28 | 13 |
Garry Galler, я говорил про среду разработки, а вы говорите про продуктивную. В продуктивной среде логи ведутся - это понятно.
Но топикстартер спрашивал, как ему в момент разработки узнать, какое нужно обрабатывать исключение. Речь вообще про webdriver шла. alex925, зачем лог смотреть в момент разработки? Мы говорим только о разработке. Как тут лог может помочь? А вот и не надо писать. Если методика разработки через анализ логов вне продуктивной среды, то о ней уже написано. Ссылки будет достаточно.
1
|
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
|
||||||||||||||||
09.08.2017, 02:07 [ТС] | 14 | |||||||||||||||
Ребят а как правильнее будет использовать блоки try/except , поделитесь своим опытом!!! Представляю вашему вниманию два варианта обработки исключений один в классе BMP_FF() , другой вариант за классом (подтолкнул комментарий мистера Garry Galler ):
--1--
или --2--
0
|
09.08.2017, 15:39 | 15 | |||||
Сообщение было отмечено Orakul как решение
Решение
Не так выбираете.
try ... except нужно ставить только там и исключительно там, где 1) ожидается наличие исключения(причем определенного типа и тип нужно знать), которое вы как разработчик 2) не можете предотвратить ну прям совсем никак (отключился интернет, нет response от сервера, отсутствует файл для чтения и т.д. )и 3) заворачивать в него исключительно ту строчку\строчки которые и могут вызвать это исключение. И не пихать в один блок перехвата сразу до кучи все прочее. Иначе получится так, что одна строчка может вызвать одно исключение, другая другое, а перехватываем мы вообще третье (либо вообще не имеющее отношение к данному блоку - KeyboardInterrupt или SystemExit, почитайте про классы исключений). Блок try except без указания типа исключения - вот это действительно некошерно. Как минимум, если вы не уверены в названии типа нужного исключения, указывайте хотя бы общий класс исключения Exception.
А просто выводить в 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 | |
09.08.2017, 16:56 | |
Помогаю со студенческими работами здесь
16
Как узнать имя экземпляра объекта? Как узнать имя UI объекта нажав по нему? Как узнать имя объекта, используемого в другом классе Как узнать имя объекта, на котором произошло последнее событие? Узнать имя функции при ловле исключения Генерация исключения для объекта производного класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |