Diskuze: try-catch chyba

C# .NET .NET (C# a Visual Basic) try-catch chyba American English version English version

Avatar
Theodor Johnson
Redaktor
Avatar
Theodor Johnson:

Ahoj, mám takový menší problém s WebClientem, běžně přes něj stahuji obsah web stránek, ale nyní jsem narazil na problém kde, i přes obalení try-catch blokem mi to stejně zastaví program (viz. obr)

Odpovědět 31.8.2013 13:10
Přecházím na "Cross-Platform Development"
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Theodor Johnson
Jan Vargovský:

Zrovna od moderátora C# fóra, bych čekal že umí googlovat.

Anyway ...
http://social.msdn.microsoft.com/…04-not-found

http://stackoverflow.com/…file-request

EDIT: jen taková poznámka, že 404 je "stránka nenalezena" takže máš chybnou adresu

Editováno 31.8.2013 13:14
 
Nahoru Odpovědět 31.8.2013 13:13
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

To si snad děláš srandu, ne? Co tam pohledává ten bool error? Hezky se ho zbav. Fuj, to jsem se lekl.

Nahoru Odpovědět 31.8.2013 13:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Vargovský
David Čápka:

On je myslím moderátor inkubátoru ;-)

Nahoru Odpovědět 31.8.2013 13:17
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na David Čápka
Jan Vargovský:

Aha, to by to vysvětlovalo. Já měl zato, že je moderátor C# :D

 
Nahoru Odpovědět  +1 31.8.2013 13:19
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Jan Vargovský
Theodor Johnson:

Tak jsem to zkusil znovu (asi po 4.) se stejnou url adresou a už mi chybu nevyhodilo, ale mě ani tak nešlo o tu chybu, ale proč mi to zastavilo když tam mám try-catch blok

Nahoru Odpovědět 31.8.2013 13:28
Přecházím na "Cross-Platform Development"
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

ten bool zajišťuje, že pokud se to nepovede stáhnout tak to nebude pokračovat, ale přeskočí to všechno co vyžaduje mít stažený ten string

Nahoru Odpovědět 31.8.2013 13:29
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

Abych nebyl jen destruktivní. Tady jsem ti přepsal ten kousek, který vidím na obrázku. Proměnná error je v daném případě fakt zbytečná.

tracklist.Clear();
foreach (string s in uris) {
    try {
        string xmlFile = webClient.DownloadString(...));
        XmlDocument _doc = new XmlDocument();
        _doc.LoadXML(xmlFile);
    } catch (WebException) {
        Console.Error.WriteLine("Chybička se vloudila");
    }
}

V podstatě je zbytečná i proměnná xmlFile, ale to už záleží na vkusu.

Nahoru Odpovědět 31.8.2013 13:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

To přeskočení přece zajistí už try..catch.

Nahoru Odpovědět 31.8.2013 13:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Kit
Jan Vargovský:

Nevím jak to je v Jave, ale v C# rozhodně ne.

 
Nahoru Odpovědět  -1 31.8.2013 13:38
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

právě že sem tam mi vyhodí chybu i jiný řádek, a to já se snažím vyřešit, ne jen že když to vyhodí chybu tak se to neprovede, pokud bych to tak udělal, mohlo by se taky stát že výsledek hledání by byl nula výsledků

Nahoru Odpovědět 31.8.2013 13:39
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

Na tom snímku se špatně rozeznává, co s tím pak dál děláš, ale stejně jsem přesvědčen, že proměnná error je tam naprosto zbytečná a jen zhoršuje čitelnost programu, ve kterém se pak špatně hledají chyby.

Nahoru Odpovědět 31.8.2013 13:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

řekl bych že v tomhle

var id = _doc.SelectSingleNode("//id");
var duration = _doc.SelectSingleNode("//duratoion");
var tag_list = _doc.SelectSingleNode("//tag-list");
var streamable = _doc.SelectSingleNode("//streamable");
var genre = _doc.SelectSingleNode("//genre");
var title = _doc.SelectSingleNode("//title");
var description = _doc.SelectSingleNode("//description");
var original_format = _doc.SelectSingleNode("//original-format");
var permalink_url = _doc.SelectSingleNode("//permalink-url");
var artwork_url = _doc.SelectSingleNode("//artwork-url");
var waveform_url = _doc.SelectSingleNode("//waveform-url");
var stream_url = _doc.SelectSingleNode("//stream-url");
var playback_count = _doc.SelectSingleNode("//playback-count");
var download_count = _doc.SelectSingleNode("//download-count");
var favouriting_count = _doc.SelectSingleNode("//favoritings-count");
var comment_count = _doc.SelectSingleNode("//comment-count");
var user_name = _doc.SelectSingleNode("//user");

se líp hledá chyba bez try-catche, protože mi VS zvýrazní ve kterém řádku mám chybu

Nahoru Odpovědět 31.8.2013 13:48
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

Podobně nepochopitelné je i proč dáváš do xmlFile hodnotu String.Empty. To je přece naprosto zbytečné přiřazení, které jen zdržuje a znepřehledňuje program.

Nahoru Odpovědět 31.8.2013 13:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

A jak to s tím souvisí? Tohle je přece úplně jiný případ z jiné vrstvy.

Nahoru Odpovědět 31.8.2013 13:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

Tak jsem to přepsal:

XmlDocument _doc = new XmlDocument();
_doc.LoadXml(webClient.DownloadString(s + clientTemplate + client_id));

ale pořád se může stát že mi server vrátí 404 a alespoň vím že try-catch je v tomto případě zbytečný

Nahoru Odpovědět  +1 31.8.2013 13:57
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

Ta výjimka ti probublá do vyšší vrstvy.

Případně to můžeš vyřešit třeba takto:
http://stackoverflow.com/…can-i-skip-t

Nahoru Odpovědět 31.8.2013 14:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

Zkusil jsem to tam přidat, a uvidím až zase nastane 404ka jestli to pomohlo

Nahoru Odpovědět 31.8.2013 14:11
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

Tak si tam nějaký neexistující odkaz přidej, ať víš, jak se to bude chovat.

Nahoru Odpovědět 31.8.2013 14:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Nevím kdo mi dal i--, ale opravdu to ten kód nepřeskočí (mluvím o tom, co nám ukázal jako první) protože nevyvolává žádnou vyjímku, takže program normalně bude postupovat dál.

 
Nahoru Odpovědět 31.8.2013 14:24
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

Už vím jak,

try { _doc.LoadXml(webClient.DownloadString(s)); }
                catch (WebException e)
                {
                    if (e.Status == WebExceptionStatus.ProtocolError)
                    {
                        HttpWebResponse resp = (HttpWebResponse)e.Response;
                        if (resp.StatusCode == HttpStatusCode.NotFound)
                        {
                            MessageBox.Show("Not found");
                        }
                        else if (resp.StatusCode == HttpStatusCode.Unauthorized)
                        {
                            MessageBox.Show("Unauthorized");
                        }
                    }
                }

mi zastaví program (nezobrazí MessageBox) s chybou:

The remote server returned an error: (401) Unauthorized.
Nahoru Odpovědět  +1 31.8.2013 14:29
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Vargovský
Kit:

Mně při 404 vyskočí výjimka. Chová se to správně.

Nahoru Odpovědět 31.8.2013 14:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

To už vypadá lépe. Ještě trochu zlepšit úpravu kódu, aby se to dalo číst...

Nahoru Odpovědět 31.8.2013 14:44
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 23 zpráv z 23.