{"id":3473,"date":"2026-06-10T10:38:01","date_gmt":"2026-06-10T10:38:01","guid":{"rendered":"https:\/\/www.mhtechin.com\/support\/?p=3473"},"modified":"2026-06-10T10:38:01","modified_gmt":"2026-06-10T10:38:01","slug":"file-handling-exception-handling-building-robust-python-applications","status":"publish","type":"post","link":"https:\/\/www.mhtechin.com\/support\/file-handling-exception-handling-building-robust-python-applications\/","title":{"rendered":"\u00a0File Handling &amp; Exception Handling \u2013 Building Robust Python Applications"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Introduction<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Every real-world application reads or writes data. Whether it\u2019s user preferences, logs, or exported reports, file handling is unavoidable. But files can fail \u2014 missing files, permission errors, corrupted data. That\u2019s where exception handling saves you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this post:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reading and writing TXT, JSON, CSV<\/li>\n\n\n\n<li><code>try<\/code>,\u00a0<code>except<\/code>,\u00a0<code>else<\/code>,\u00a0<code>finally<\/code><\/li>\n\n\n\n<li>Best practices for robust code<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Text Files: The Basics<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Writing to a TXT file<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">with open(\"data.txt\", \"w\") as file:\n    file.write(\"Hello, World!\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<code>with<\/code>&nbsp;statement automatically closes the file. Never use&nbsp;<code>open()<\/code>&nbsp;without&nbsp;<code>with<\/code>&nbsp;in production code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reading from a TXT file<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">with open(\"data.txt\", \"r\") as file:\n    content = file.read()\n    print(content)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Modes:&nbsp;<code>\"r\"<\/code>&nbsp;= read,&nbsp;<code>\"w\"<\/code>&nbsp;= write (overwrites),&nbsp;<code>\"a\"<\/code>&nbsp;= append.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">JSON Files: Structured Data<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">JSON is the universal language of APIs and config files.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Writing JSON<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import json\n\ndata = {\"name\": \"Alice\", \"age\": 30}\nwith open(\"user.json\", \"w\") as file:\n    json.dump(data, file, indent=4)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Reading JSON<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">with open(\"user.json\", \"r\") as file:\n    data = json.load(file)\n    print(data[\"name\"])  # Alice<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Always use&nbsp;<code>indent<\/code>&nbsp;for readability when writing JSON manually.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">CSV Files: Tabular Data<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CSV (Comma-Separated Values) is everywhere in data exports.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reading CSV<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import csv\n\nwith open(\"employees.csv\", \"r\") as file:\n    reader = csv.reader(file)\n    for row in reader:\n        print(row)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Writing CSV<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">with open(\"output.csv\", \"w\", newline=\"\") as file:\n    writer = csv.writer(file)\n    writer.writerow([\"Name\", \"Age\"])\n    writer.writerow([\"Bob\", 25])<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>newline=\"\"<\/code>&nbsp;prevents blank lines between rows on Windows.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Exception Handling: Preventing Crashes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Files don&#8217;t always exist. Networks fail. JSON gets corrupted.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Basic&nbsp;<code>try-except<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">try:\n    with open(\"missing.txt\", \"r\") as file:\n        print(file.read())\nexcept FileNotFoundError:\n    print(\"File not found. Creating a new one.\")\n    with open(\"missing.txt\", \"w\") as file:\n        file.write(\"Default content\")<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Multiple Exceptions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">try:\n    value = int(input(\"Enter number: \"))\n    result = 10 \/ value\nexcept ValueError:\n    print(\"That's not a number!\")\nexcept ZeroDivisionError:\n    print(\"Cannot divide by zero!\")<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><code>else<\/code>&nbsp;and&nbsp;<code>finally<\/code><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>else<\/code>: Runs if no exception occurred.<\/li>\n\n\n\n<li><code>finally<\/code>: Always runs (cleanup code).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">try:\n    file = open(\"log.txt\", \"r\")\nexcept FileNotFoundError:\n    print(\"File missing\")\nelse:\n    print(\"File read successfully\")\nfinally:\n    print(\"Execution complete\")<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Best Practices<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Catch specific exceptions<\/strong>\u00a0\u2014 never use bare\u00a0<code>except:<\/code>.<\/li>\n\n\n\n<li><strong>Use\u00a0<code>with<\/code>\u00a0for files<\/strong>\u00a0\u2014 automatic closing.<\/li>\n\n\n\n<li><strong>Log exceptions<\/strong>\u00a0in production apps instead of just printing.<\/li>\n\n\n\n<li><strong>Validate JSON<\/strong>\u00a0before parsing.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Summary<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">File Type<\/th><th class=\"has-text-align-left\" data-align=\"left\">Read Method<\/th><th class=\"has-text-align-left\" data-align=\"left\">Write Method<\/th><\/tr><\/thead><tbody><tr><td>TXT<\/td><td><code>open().read()<\/code><\/td><td><code>open().write()<\/code><\/td><\/tr><tr><td>JSON<\/td><td><code>json.load()<\/code><\/td><td><code>json.dump()<\/code><\/td><\/tr><tr><td>CSV<\/td><td><code>csv.reader()<\/code><\/td><td><code>csv.writer()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Every real-world application reads or writes data. Whether it\u2019s user preferences, logs, or exported reports, file handling is unavoidable. But files can fail \u2014 missing files, permission errors, corrupted data. That\u2019s where exception handling saves you. In this post: Text Files: The Basics Writing to a TXT file python with open(&#8220;data.txt&#8221;, &#8220;w&#8221;) as file: [&hellip;]<\/p>\n","protected":false},"author":69,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3473","post","type-post","status-publish","format-standard","hentry","category-support"],"_links":{"self":[{"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/posts\/3473","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/users\/69"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/comments?post=3473"}],"version-history":[{"count":2,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/posts\/3473\/revisions"}],"predecessor-version":[{"id":3485,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/posts\/3473\/revisions\/3485"}],"wp:attachment":[{"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/media?parent=3473"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/categories?post=3473"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/tags?post=3473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}