Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 | 4 | 5 |

 

  Вопрос: Пропустить часть ошибок Добавлено: 15.05.09 18:05  

Автор вопроса:  AWР | Web-сайт: bomber.h17.ru | ICQ: 345685652 

Ответить

  Ответы Всего ответов: 61  

Номер ответа: 31
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #31 Добавлено: 19.05.09 10:54
Можешь с помощью On Error ... сделать что-то типа такого?

  1. on error resume next
  2.    Dim Text = IO.File.ReadAllText(Path)
  3. select case description
  4.   case = "FileNotFound"
  5.  
  6.   case = "PathTooLong"
  7.  
  8. end select
  9. err.clear
  10. on error goto 0

Ответить

Номер ответа: 32
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #32 Добавлено: 19.05.09 10:55
Можешь с помощью On Error ... сделать что-то типа такого?

  1. on error resume next
  2.    Dim Text = IO.File.ReadAllText(Path)
  3. select case err.description
  4.   case = "FileNotFound"
  5.  
  6.   case = "PathTooLong"
  7.  
  8. end select
  9. err.clear
  10. on error goto 0

Ответить

Номер ответа: 33
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #33 Добавлено: 19.05.09 11:30
Вау!! )))))) Такого я еще не видел!
Много всяких перлов от спецов по VB6/VBA видел на этом форуме... Но чтобы такое!!! жесть! )))

Ответить

Номер ответа: 34
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #34 Добавлено: 19.05.09 11:34
зато работает. И очень даже неплохо.

Ответить

Номер ответа: 35
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #35 Добавлено: 19.05.09 12:21
зато работает.

По всей видимости, у нас тобой разное понимание слова "работает"

Ответить

Номер ответа: 36
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #36 Добавлено: 19.05.09 12:25
меня интересует конечный результат. То что увидит пользователь. А какие навороты я внутри использовал, это мои личные трудности, я так считаю. А программирование ради программирования - это хобби! (в смысле для тех, кто это может себе позволить)

Ответить

Номер ответа: 37
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #37 Добавлено: 19.05.09 13:09
Сергей, твой код не заработает.
В err.description никогда не будет тех строк что ты ожидаешь, там будут другие строки с описанием ошибки типа "Файл 1.txt не найден" (причем в различных локализациях .NET Framework описания будут разные), которые непросто будет различать.

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

Чтоб сделать подобное тому что сделал я, тебе прийдется перебирать не по Err.Description, а по Err.Number.
А мало того что эти номера ничего сами по себе не значит, так там и не все номера есть которые возможны и номера еще помнить нужно.
Сможешь навскидку десяток номеров ошибок привести?

Сергей пишет:
меня интересует конечный результат. То что увидит пользователь. А какие навороты я внутри использовал, это мои личные трудности, я так считаю. А программирование ради программирования - это хобби! (в смысле для тех, кто это может себе позволить)

Пользвоателя интерисует рабочая программа. А ты сейчас написал нерабочий код. И о том что он нерабочий не узнаешь ни ты (если конечно не проведешь тесты с отладчиком, которые бы покрыли все обрабочтики) ни пользователь.

Ответить

Номер ответа: 38
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #38 Добавлено: 19.05.09 14:07
Чтоб сделать подобное тому что сделал я, тебе прийдется перебирать не по Err.Description, а по Err.Number.
конечно правильно!
Я показал путь, а если нужна конкретная реализация, то конечно по номеру. И эти номера не секрет.
Главное, я хотел сказать что и та и та реализация допустима. Нельзя категорично говорить, что одно - мед, другое - жесть. Все надо рассматривать в приложении к задаче и стилю (почерку) программиста.

Ответить

Номер ответа: 39
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #39
Добавлено: 19.05.09 14:26
SteelBrand,

Можешь с помощью On Error ... сделать что-то типа такого?

Да

Ответить

Номер ответа: 40
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #40
Добавлено: 19.05.09 14:28
И чаще всего виноват не язык программирования, особенно не для корпоративных решений

Ответить

Номер ответа: 41
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #41
Добавлено: 19.05.09 14:43
Хотя, Сергей, ты не прав - не стоит использовать старье, где есть написанное гораздо лучше и правильнее

Ответить

Номер ответа: 42
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #42 Добавлено: 19.05.09 14:47
Сергей пишет:
Я показал путь, а если нужна конкретная реализация, то конечно по номеру

Ну покажи нам конкретную реализацию с номерами.

Сергей пишет:
И эти номера не секрет.

Для кого не секрет?

10 минут изучения документации не привели меня к списке номеров ошибок, поэтому могу предположить что либо этих номеров в MSDN вообще нет, либо их нужно искать в старых MSDN за 2000 год.

Про исключения иформация чуть ли не на каждой странице, читай - не хочу.

Сергей пишет:
Главное, я хотел сказать что и та и та реализация допустима. Нельзя категорично говорить, что одно - мед, другое - жесть. Все надо рассматривать в приложении к задаче и стилю (почерку) программиста.

Сергей, ты обречен на поражение, потому что обработка ошибок, унаследованная из VB6 это именно и есть жесть. Потому что она не дает всех возможностей для обрабокти и локализации ошибки которые предоставляет платформа.

С файловой системой я неудачный пример привел, и в принципе подобный код с помощью объекта Err можно воспроизвести (впрочем ты этого не смог сделать), потому что в VB6 была файловая система и были какие-то коды ошибок для работы с файловой системой.

А возможность делать HTTP-запросы была? Попробуй например воспроизвести что-то из этого

  1.         Try
  2.             Dim Client As New WebClient
  3.             Dim Text As String = Client.DownloadString("http://vbnet.ru/hel.txt")
  4.         Catch ex As WebException
  5.             Console.WriteLine(ex.Message)
  6.  
  7.             Select Case ex.Status
  8.                 Case WebExceptionStatus.Timeout
  9.                     Console.WriteLine("Таймаут")
  10.                 Case WebExceptionStatus.ConnectionClosed
  11.                     Console.WriteLine("Соединение было оборвано")
  12.                 Case WebExceptionStatus.ProtocolError
  13.                     Console.WriteLine("Ошибка протокола")
  14.                 Case Else
  15.                     Console.WriteLine("Неизвестная ошибка")
  16.             End Select
  17.  
  18.             If ex.Response IsNot Nothing Then
  19.                 Using Reader = New IO.StreamReader(ex.Response.GetResponseStream)
  20.                     Console.WriteLine(Reader.ReadToEnd)
  21.                 End Using
  22.             End If
  23.         End Try


Что из этого ты сможешь вытянить из объекта Err?
ex.Message - сообщение сможешь вытянуть из Err.Desciption
Ну и еще номер ошибки 5, который вряд является кодом, специфичным для ошибок HTTP.

Ответить

Номер ответа: 43
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #43 Добавлено: 19.05.09 14:56
На всякий случай если не просек фишку - в .NET нет поддержки операторов On Error Goto... On Error Resume Next, и объект Err также очень слабо интегрирован.

Чтоб любители Vb6 могли все это использовать в VB .NET, компилятор выполняет реализацию обрабокти ошибок "в стиле VB6", комбинируя в кучу конструкции Try/Catch, GoTo и вызовы различных Helper-методов.
Здесь в топике уже показывали как выглядит On Error Resume Next в IL-коде, желающие копнуть глубже - берут рефлектор в руки.

Ответить

Номер ответа: 44
Автор ответа:
 _Serega



Вопросов: 1
Ответов: 43
 Профиль | | #44 Добавлено: 22.05.09 23:00
Дело в том, что по большому счету событие ошибки, раз уж оно перехвачено - оно одно на все методы, при всем их разнообразии, которые просто определяет что делать, если произошла ошибка, а то что TRY красивее транслируется в IL - вовсе не означает, что он работает в самом деле по другому, более того я предположу, что в реальном коде будет сгенерировано больше количество команд и это может быть нужно или нет, но я не вижу в этом никакого преимущества. Что значит плохо или хорошо поддерживается? Это метод и он или выполняет свои инструкции или нет - и с этим никаких проблем нет - исправно работает и то и другое. Если же ты такой грамотный и опытный, в отличии от меня, то с чего вдруг ты не знаешь как работает Windows? То что на API - об этом не только у Эплмана написано, об этом написано и в MSDN - непосредственной сопроводительной документации того языка на котором ты целых 5 лет работаешь.))))

Ответить

Номер ответа: 45
Автор ответа:
 _Serega



Вопросов: 1
Ответов: 43
 Профиль | | #45 Добавлено: 22.05.09 23:19
Про тот же пример с соеденением и HTTP-запросы, ну случилась ошибка и блок или выполняет свои функции дальше или прерывает свою работу, в чем конкретно преимущество? Что будет выведено сообщение отчего он это сделал? Сама установка соеденения в любом случае через API происходит, ну и считай HRESULT и так же по коду возврата сделай ту же кейсовую обработку, принципиальная разница то в чем? Кстатьи в MSDN в действительности часть документации по этим вопросам находится только в разделах С и отсутствует в разделах VB, но это как бы вопросы к майкрософт, а не ко мне.

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам