Diskuze: try-catch chyba
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 23 zpráv z 23.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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
To si snad děláš srandu, ne? Co tam pohledává ten
bool error? Hezky se ho zbav. Fuj, to jsem se lekl.
Aha, to by to vysvětlovalo. Já měl zato, že je moderátor C# 
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
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
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.
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ů
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.
ř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
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.
A jak to s tím souvisí? Tohle je přece úplně jiný případ z jiné vrstvy.
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ý
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
Zkusil jsem to tam přidat, a uvidím až zase nastane 404ka jestli to pomohlo
Tak si tam nějaký neexistující odkaz přidej, ať víš, jak se to bude chovat.
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.
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.
To už vypadá lépe. Ještě trochu zlepšit úpravu kódu, aby se to dalo číst...
Zobrazeno 23 zpráv z 23.