{"id":13814,"date":"2026-01-26T11:55:31","date_gmt":"2026-01-26T10:55:31","guid":{"rendered":"https:\/\/infoshareacademy.com\/blog\/?p=13814"},"modified":"2026-01-29T10:26:43","modified_gmt":"2026-01-29T09:26:43","slug":"jak-zaprojektowac-bledy-w-pythonie","status":"publish","type":"post","link":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/","title":{"rendered":"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie?"},"content":{"rendered":"\n<p style=\"text-align: justify;\">B\u0142\u0119dy w kodzie to co\u015b, z czym ka\u017cdy programista pr\u0119dzej czy p\u00f3\u017aniej musi si\u0119 zmierzy\u0107. Niezale\u017cnie od tego, czy piszemy kr\u00f3tki program automatyzuj\u0105cy codzienn\u0105 prac\u0119, czy rozbudowujemy du\u017c\u0105 aplikacj\u0119 webow\u0105 o kolejny feature, pr\u0119dzej czy p\u00f3\u017aniej pojawi si\u0119 sytuacja, kt\u00f3rej nie przewidzieli\u015bmy. I w\u0142a\u015bnie w tym momencie zaczyna si\u0119 prawdziwe projektowanie oprogramowania. To, czy b\u0142\u0119dy sparali\u017cuj\u0105 nam prac\u0119 &#8211; nieistotne, czy powsta\u0142e z winy u\u017cytkownika, czy te\u017c wadliwego kodu &#8211; zale\u017cy od tego jak dobrze zaprojektowali\u015bmy sobie obs\u0142ug\u0119 b\u0142\u0119d\u00f3w w kodzie. Python dzi\u0119ki swojemu systemowi wyj\u0105tk\u00f3w (Exceptions), pozwala na sprawne wy\u0142apywanie b\u0142\u0119d\u00f3w okre\u015blonego rodzaju jak i projektowanie w\u0142asnych, dopasowanych do okre\u015blonych potrzeb.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Proste wykrywanie b\u0142\u0119d\u00f3w za pomoc\u0105 try-except<\/h2>\n\n\n\n<p><p style=\"text-align: justify;\">Za\u0142\u00f3\u017cmy, \u017ce nasz u\u017cytkownik wype\u0142nia formularz podaj\u0105c nam swoje dane, a w\u015br\u00f3d nich np. wiek zapisywany w zmiennej <em>wiek_uzytkownika<\/em>. Naturalnie oczekujemy, i\u017c wiek b\u0119dzie liczb\u0105 ca\u0142kowit\u0105. Skoro tak, to wywo\u0142anie na nim funkcji <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">int()<\/mark><\/code> <strong>nie powinno<\/strong> nam zwr\u00f3ci\u0107 b\u0142\u0119du:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/Qv2Ph6atEuv0tsDvXPxW\"\n style=\"width: 800px; height: 200px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Je\u015bli chcemy si\u0119 przygotowa\u0107 na b\u0142\u0105d i jego odpowiedni\u0105 obs\u0142ug\u0119 warto sprawdzi\u0107 jaki b\u0142\u0105d zwr\u00f3ci nam Python wpisuj\u0105c do Pythonowego interpretera np.:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/oY0A0IAeEGNtjiXf74kv\"\n  style=\"width: 800px; height: 380px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">B\u0142\u0105d, kt\u00f3rego poszukujemy to <strong>ValueError<\/strong>. Teraz mo\u017cemy wykorzysta\u0107 <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">try-except<\/mark><\/code> celem &#8222;wy\u0142apania&#8221; go. W bloku <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">try<\/mark><\/code> dajemy porcj\u0119 kodu, kt\u00f3ry pr\u00f3bujemy wykona\u0107 &#8211; <strong>w normalnej sytuacji wykona si\u0119 on normalnie<\/strong>. Z kolei w bloku <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">except<\/mark><\/code> projektujemy co ma si\u0119 wydarzy\u0107 je\u015bli dany rodzaj b\u0142\u0119du zostanie wykryty, np. wy\u015bwietlimy informacj\u0119 \u017ce wiek musi by\u0107 liczb\u0105:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/1EPP5PRdcKWRJswRaTGc\"\n  style=\"width: 800px; height: 261px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Mo\u017cna dodawa\u0107 nowe bloki <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">except<\/mark><\/code> wy\u0142apywuj\u0105ce r\u00f3\u017cne rodzaje b\u0142\u0119d\u00f3w, np. przyjmimy od u\u017cytkownika liczb\u0119 w zmiennej <em>liczba<\/em> i u\u017cyjmy jej do dzielenia. Wiele rzeczy mo\u017ce p\u00f3j\u015b\u0107 nie tak:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/4Vt6XAjjBragNLJlqSq1\"\n  style=\"width: 800px; height: 380px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Czasem chcemy si\u0119 &#8222;ubezpieczy\u0107&#8221; ekstra przed nieprzewidzianym b\u0142\u0119dem, s\u0142u\u017cy do tego uniwersalne <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Exception<\/mark><\/code> &#8211; ono wy\u0142apie ka\u017cdy rodzaj b\u0142\u0119du:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/uOlSw9Bx7TcX8oNdRF2G\"\n  style=\"width: 800px; height: 220px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Nie powinno si\u0119 jednak go nadu\u017cywa\u0107 &#8211; je\u015bli oczekujemy konkretnych rodzaj\u00f3w b\u0142\u0119d\u00f3w to zawsze warto wy\u0142apywa\u0107 je najpierw.<\/p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Projektowanie w\u0142asnych b\u0142\u0119d\u00f3w<\/h2>\n\n\n\n<p><p style=\"text-align: justify;\">Python ma ca\u0142kiem poka\u017an\u0105 list\u0119 wbudowanych b\u0142\u0119d\u00f3w: <a href=\"https:\/\/docs.python.org\/3\/library\/exceptions.html\">[Python Built-in Exceptions]<\/a>. Niestety, w praktyce projektuj\u0105c w\u0142asne aplikacje bardzo szybko b\u0119dziemy potrzebowa\u0107 w\u0142asnych b\u0142\u0119d\u00f3w uruchamiaj\u0105cych si\u0119 w odpowiednich sytuacjach. Za\u0142\u00f3\u017cmy, \u017ce prowadzimy sklep spo\u017cywczy. Je\u015bli klient zdecyduje si\u0119 na zakup tytoniu lub alkoholu musimy zweryfikowa\u0107 czy ma przynajmniej 18 lat, zaprojektujemy wi\u0119c b\u0142\u0105d jako klas\u0119:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/Cj90VquSsW9tb9zoYzeN\"\n  style=\"width: 800px; height: 261px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Nasza klasa dziedziczy po klasie <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Exception<\/mark><\/code>, wi\u0119c jest kompatybilna z mechanizmem <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">try-except<\/mark><\/code> i Python &#8222;wie&#8221;, \u017ce <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Under18Error<\/mark><\/code> to rodzaj b\u0142\u0119du. W konstruktorze klasy (<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">__init__<\/mark><\/code>) ustawiamy domy\u015blny komunikat w <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">message<\/mark><\/code> gdyby program nie poda\u0142 \u017cadnego od siebie. Na koniec wywo\u0142ujemy konstruktor klasy bazowej (czyli <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Exception<\/mark><\/code>) z naszym komunikatem. Pozostaje wpi\u0105\u0107 nasz b\u0142\u0105d w dzia\u0142aj\u0105cy program &#8211; b\u0142\u0105d wywo\u0142amy komend\u0105 <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">raise Under18Error<\/mark><\/code>. Za\u0142\u00f3\u017cmy \u017ce wiek klienta mamy ju\u017c w zmiennej <em>wiek_klienta<\/em>:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/X63CPhOrr6UCnZNSgfLN\"\n  style=\"width: 800px; height: 300px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Mo\u017cemy dodawa\u0107 odpowiednie komunikaty, je\u015bli np. jest w dziale z tytoniem, to zamienimy nasz\u0105 pierwotn\u0105 komend\u0119 <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">raise<\/mark><\/code> komend\u0105:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/ot04AaAXFjNGrPpFVbwP\"\n  style=\"width: 800px; height: 261px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<h2 class=\"wp-block-heading\">\u0141atanie dziur logicznych w kodzie<\/h2>\n\n\n\n<p><p style=\"text-align: justify;\">Ostatni\u0105 rzecz\u0105, o kt\u00f3rej warto pami\u0119ta\u0107 jest upewnianie si\u0119, \u017ce nasze bramki logiczne obs\u0142uguj\u0105 wszystkie scenariusze. Za\u0142\u00f3\u017cmy, \u017ce nasza aplikacja przetwarza faktury z Polski i Niemiec, naturalnie w kodzie znajdzie si\u0119 wi\u0119c kod podobny do tego poni\u017cej:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/QHV37EinBIPwSPUmmS7l\"\n  style=\"width: 800px; height: 261px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Nawet je\u015bli nie planujemy procesowa\u0107 innych faktur, to warto obs\u0142u\u017cy\u0107 tutaj sytuacj\u0119 w kt\u00f3rej zmienna <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">event['kraj']<\/mark><\/code> przyjmie inn\u0105 warto\u015b\u0107 &#8211; by\u0107 mo\u017ce za rok rozszerzymy dzia\u0142alno\u015b\u0107 np. o Litw\u0119. W aplikacji licz\u0105cej tysi\u0105ce linijek kodu ci\u0119\u017cko b\u0119dzie wy\u0142apa\u0107 gdzie &#8222;znikaj\u0105&#8221; litewskie faktury, wystarczy doda\u0107 co\u015b w stylu:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/wmo5buE8QofNYIzkQtaY\"\n  style=\"width: 800px; height: 261px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Niekoniecznie chroni nas to przed wszystkimi b\u0142\u0119dami &#8211; mog\u0142o si\u0119 zdarzy\u0107 \u017ce program pr\u00f3bowa\u0142 pobra\u0107 faktury z systemu, ale akurat wszystkie by\u0142y ju\u017c przeprocesowane i zwr\u00f3ci\u0142 nam pust\u0105 tabelk\u0119, a kluczowa zmienna nie zosta\u0142a spopulowana. W takim przypadku otrzymamy <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">KeyError<\/mark><\/code> przy pr\u00f3bie odwo\u0142ania si\u0119 do <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">event['kraj']<\/mark><\/code>. \u017beby temu zapobiec warto przed blokiem <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">if-else<\/mark><\/code> doda\u0107 dodatkow\u0105 weryfikacj\u0119, np.:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/kWLGRiQlLTnMZOqttyCq\"\n  style=\"width: 800px; height: 261px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Tutaj <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">EmptyTableError<\/mark><\/code> by\u0142by naszym zaprojektowanym b\u0142\u0119dem, kt\u00f3ry niekoniecznie ko\u0144czy\u0142by prac\u0119 ca\u0142ego programu. Program m\u00f3g\u0142by dzia\u0142a\u0107 dalej, dzi\u0119ki odpowiedniemu zastosowaniu <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">try-except<\/mark><\/code>:<\/p><\/p>\n\n\n\n<iframe\n  src=\"https:\/\/carbon.now.sh\/embed\/mkBT6rPS7wj2DCWcIupW\"\n  style=\"width: 800px; height: 380px; border:0; transform: scale(1); overflow:hidden;\"\n  sandbox=\"allow-scripts allow-same-origin\">\n<\/iframe>\n\n\n\n<p><p style=\"text-align: justify;\">Je\u015bli chcesz us\u0142ysze\u0107 wi\u0119cej o programowaniu w Pythonie, projektowaniu b\u0142\u0119d\u00f3w, czy pracy z ETL i innymi technologiami Data Engineera, koniecznie sprawd\u017a nasz <a href=\"https:\/\/infoshareacademy.com\/kurs\/kurs-data-engineer\/\">kurs Data Engineer<\/a> na infoShare Academy!<\/p><\/p>\n\n\n\n<div class=\"wp-block-media-text\" style=\"grid-template-columns:30% auto\"><figure class=\"wp-block-media-text__media\"><a href=\"https:\/\/www.linkedin.com\/in\/artur-dzieciol\/\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2026\/01\/1744180292399.jpeg\" alt=\"\" class=\"wp-image-13830 size-full\" srcset=\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2026\/01\/1744180292399.jpeg 800w, https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2026\/01\/1744180292399-300x300.jpeg 300w, https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2026\/01\/1744180292399-150x150.jpeg 150w, https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2026\/01\/1744180292399-768x768.jpeg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"has-text-color has-link-color has-small-font-size wp-elements-1bbb0784632c2c8053f8f57289b5b8da\" style=\"color:#9b9b9b\">Autor<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong><a href=\"https:\/\/www.linkedin.com\/in\/artur-dzieciol\/\">Artur Dzi\u0119cio\u0142 [in]<\/a><\/strong><\/p>\n\n\n\n<p class=\"has-small-font-size\">Data Engineer @ CBRE | Python | PySpark | AWS | PostgreSQL | Terraform | CI\/CD | Docker | Tableau<\/p>\n\n\n\n<p class=\"has-small-font-size\">Jestem Data Engineerem z ponad 7-letnim do\u015bwiadczeniem. Przeszed\u0142em \u015bcie\u017ck\u0119 od analityka i BI Developera (Excel, Tableau) do obecnej roli opartej na Pythonie, SQL i AWS. Do\u015bwiadczenie w pracy z biznesem pozwala mi patrze\u0107 na dane kompleksowo. Obecnie skupiam si\u0119 na backendzie, a pasj\u0119 do nauki realizuj\u0119 na bootcampach, gdzie wyja\u015bniam skomplikowane technologie prostymi s\u0142owami.<\/p>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>B\u0142\u0119dy w kodzie to co\u015b, z czym ka\u017cdy programista pr\u0119dzej czy p\u00f3\u017aniej musi si\u0119 zmierzy\u0107. Niezale\u017cnie od tego, czy piszemy kr\u00f3tki program automatyzuj\u0105cy codzienn\u0105 prac\u0119, czy rozbudowujemy du\u017c\u0105 aplikacj\u0119 webow\u0105 o kolejny feature, pr\u0119dzej czy p\u00f3\u017aniej pojawi si\u0119 sytuacja, kt\u00f3rej nie przewidzieli\u015bmy. I w\u0142a\u015bnie w tym momencie zaczyna si\u0119 prawdziwe projektowanie oprogramowania. To, czy b\u0142\u0119dy &hellip;<\/p>\n","protected":false},"author":18,"featured_media":13880,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,27,41],"tags":[],"class_list":["post-13814","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-science","category-poradniki","category-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie? - infoShare Academy Blog<\/title>\n<meta name=\"description\" content=\"Dowiedz si\u0119, jak pisa\u0107 bezpieczny kod w Pythonie. Przewodnik po obs\u0142udze wyj\u0105tk\u00f3w: od try-except, przez w\u0142asne klasy b\u0142\u0119d\u00f3w, a\u017c po walidacj\u0119 logiki biznesowej.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie? - infoShare Academy Blog\" \/>\n<meta property=\"og:description\" content=\"Dowiedz si\u0119, jak pisa\u0107 bezpieczny kod w Pythonie. Przewodnik po obs\u0142udze wyj\u0105tk\u00f3w: od try-except, przez w\u0142asne klasy b\u0142\u0119d\u00f3w, a\u017c po walidacj\u0119 logiki biznesowej.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/\" \/>\n<meta property=\"og:site_name\" content=\"infoShare Academy Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/infoshareacademy\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-26T10:55:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-29T09:26:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2026\/01\/carbon-4-e1769674580207.png\" \/>\n\t<meta property=\"og:image:width\" content=\"922\" \/>\n\t<meta property=\"og:image:height\" content=\"533\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"mateusz.piernikarczyk@infoshareacademy.com\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"mateusz.piernikarczyk@infoshareacademy.com\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/\"},\"author\":{\"name\":\"mateusz.piernikarczyk@infoshareacademy.com\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/bfda6d1aeb19909ac4aeee2b2986c8e2\"},\"headline\":\"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie?\",\"datePublished\":\"2026-01-26T10:55:31+00:00\",\"dateModified\":\"2026-01-29T09:26:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/\"},\"wordCount\":839,\"publisher\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#organization\"},\"articleSection\":[\"Data Science\",\"Poradniki\",\"Python\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/\",\"url\":\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/\",\"name\":\"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie? - infoShare Academy Blog\",\"isPartOf\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#website\"},\"datePublished\":\"2026-01-26T10:55:31+00:00\",\"dateModified\":\"2026-01-29T09:26:43+00:00\",\"description\":\"Dowiedz si\u0119, jak pisa\u0107 bezpieczny kod w Pythonie. Przewodnik po obs\u0142udze wyj\u0105tk\u00f3w: od try-except, przez w\u0142asne klasy b\u0142\u0119d\u00f3w, a\u017c po walidacj\u0119 logiki biznesowej.\",\"breadcrumb\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/infoshareacademy.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#website\",\"url\":\"https:\/\/infoshareacademy.com\/blog\/\",\"name\":\"infoShare Academy Blog\",\"description\":\"Strona o szkoleniach w IT\",\"publisher\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/infoshareacademy.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#organization\",\"name\":\"infoShare Academy\",\"url\":\"https:\/\/infoshareacademy.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2022\/11\/infoShare-Academy-ver-white-with-background-1000x1000px.jpg\",\"contentUrl\":\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2022\/11\/infoShare-Academy-ver-white-with-background-1000x1000px.jpg\",\"width\":1000,\"height\":1000,\"caption\":\"infoShare Academy\"},\"image\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/infoshareacademy\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/bfda6d1aeb19909ac4aeee2b2986c8e2\",\"name\":\"mateusz.piernikarczyk@infoshareacademy.com\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8d0d979a4d1ae0c5371979c94555e365d334d1534337ad5568a7e9c757324d94?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8d0d979a4d1ae0c5371979c94555e365d334d1534337ad5568a7e9c757324d94?s=96&d=mm&r=g\",\"caption\":\"mateusz.piernikarczyk@infoshareacademy.com\"},\"url\":\"https:\/\/infoshareacademy.com\/blog\/author\/mateusz-piernikarczykinfoshareacademy-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie? - infoShare Academy Blog","description":"Dowiedz si\u0119, jak pisa\u0107 bezpieczny kod w Pythonie. Przewodnik po obs\u0142udze wyj\u0105tk\u00f3w: od try-except, przez w\u0142asne klasy b\u0142\u0119d\u00f3w, a\u017c po walidacj\u0119 logiki biznesowej.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/","og_locale":"pl_PL","og_type":"article","og_title":"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie? - infoShare Academy Blog","og_description":"Dowiedz si\u0119, jak pisa\u0107 bezpieczny kod w Pythonie. Przewodnik po obs\u0142udze wyj\u0105tk\u00f3w: od try-except, przez w\u0142asne klasy b\u0142\u0119d\u00f3w, a\u017c po walidacj\u0119 logiki biznesowej.","og_url":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/","og_site_name":"infoShare Academy Blog","article_publisher":"https:\/\/www.facebook.com\/infoshareacademy","article_published_time":"2026-01-26T10:55:31+00:00","article_modified_time":"2026-01-29T09:26:43+00:00","og_image":[{"width":922,"height":533,"url":"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2026\/01\/carbon-4-e1769674580207.png","type":"image\/png"}],"author":"mateusz.piernikarczyk@infoshareacademy.com","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"mateusz.piernikarczyk@infoshareacademy.com","Szacowany czas czytania":"5 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/#article","isPartOf":{"@id":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/"},"author":{"name":"mateusz.piernikarczyk@infoshareacademy.com","@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/bfda6d1aeb19909ac4aeee2b2986c8e2"},"headline":"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie?","datePublished":"2026-01-26T10:55:31+00:00","dateModified":"2026-01-29T09:26:43+00:00","mainEntityOfPage":{"@id":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/"},"wordCount":839,"publisher":{"@id":"https:\/\/infoshareacademy.com\/blog\/#organization"},"articleSection":["Data Science","Poradniki","Python"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/","url":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/","name":"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie? - infoShare Academy Blog","isPartOf":{"@id":"https:\/\/infoshareacademy.com\/blog\/#website"},"datePublished":"2026-01-26T10:55:31+00:00","dateModified":"2026-01-29T09:26:43+00:00","description":"Dowiedz si\u0119, jak pisa\u0107 bezpieczny kod w Pythonie. Przewodnik po obs\u0142udze wyj\u0105tk\u00f3w: od try-except, przez w\u0142asne klasy b\u0142\u0119d\u00f3w, a\u017c po walidacj\u0119 logiki biznesowej.","breadcrumb":{"@id":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/infoshareacademy.com\/blog\/jak-zaprojektowac-bledy-w-pythonie\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/infoshareacademy.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Jak zaprojektowa\u0107 b\u0142\u0119dy w Pythonie?"}]},{"@type":"WebSite","@id":"https:\/\/infoshareacademy.com\/blog\/#website","url":"https:\/\/infoshareacademy.com\/blog\/","name":"infoShare Academy Blog","description":"Strona o szkoleniach w IT","publisher":{"@id":"https:\/\/infoshareacademy.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/infoshareacademy.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/infoshareacademy.com\/blog\/#organization","name":"infoShare Academy","url":"https:\/\/infoshareacademy.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2022\/11\/infoShare-Academy-ver-white-with-background-1000x1000px.jpg","contentUrl":"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2022\/11\/infoShare-Academy-ver-white-with-background-1000x1000px.jpg","width":1000,"height":1000,"caption":"infoShare Academy"},"image":{"@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/infoshareacademy"]},{"@type":"Person","@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/bfda6d1aeb19909ac4aeee2b2986c8e2","name":"mateusz.piernikarczyk@infoshareacademy.com","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8d0d979a4d1ae0c5371979c94555e365d334d1534337ad5568a7e9c757324d94?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8d0d979a4d1ae0c5371979c94555e365d334d1534337ad5568a7e9c757324d94?s=96&d=mm&r=g","caption":"mateusz.piernikarczyk@infoshareacademy.com"},"url":"https:\/\/infoshareacademy.com\/blog\/author\/mateusz-piernikarczykinfoshareacademy-com\/"}]}},"_links":{"self":[{"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/posts\/13814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/comments?post=13814"}],"version-history":[{"count":60,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/posts\/13814\/revisions"}],"predecessor-version":[{"id":13895,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/posts\/13814\/revisions\/13895"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/media\/13880"}],"wp:attachment":[{"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/media?parent=13814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/categories?post=13814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/tags?post=13814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}