隨手養成 Python 好習慣-簡單導入 logging 模組
如果說最方便且偷懶的對程式進行除錯訊息的記錄是 print()
的話,那麼我的建議是-「如果你正在使用最方便且偷懶的方法,而且知道這種方式不好的話,那麼請花費一點點時間看完這篇文章;如果你早已經像喝水一樣自然地使用 logging
模組的話,可以不需要在閱讀此篇文章」
Posted on Sep 9, 2016 in Python 程式設計 - 初階 by Amo Chen ‐ 2 min read
如果說最方便且偷懶的對程式進行除錯訊息的記錄是 print()
的話,那麼我的建議是-「如果你正在使用最方便且偷懶的方法,而且知道這種方式不好的話,那麼請花費一點點時間看完這篇文章;如果你早已經像喝水一樣自然地使用 logging
模組的話,可以不需要在閱讀此篇文章」
Posted on Sep 9, 2016 in Python 程式設計 - 初階 by Amo Chen ‐ 2 min read
Python 內建有不少時間相關的操作函數,本篇將如何取得日期區間記錄成 Python recipes ,以供方便使用。
這些方法主要使用 timedelta
進行時間加減、 calendar
取得月份天數以及其他 datetime
模組所提供之函數組合而成。
Posted on Sep 8, 2016 in Python 程式設計 - 初階 by Amo Chen ‐ 1 min read
在我們談到 with
語句時,就不得不先提到所謂的 Context Manager
,有人翻譯成上下文管理器,但我覺得稱為情境管理即可,簡單來講就是希望規範一個物件在進入與離開 with
語句所創造的情境範圍內時能夠自動進行一些動作,打個比方就是進入浴室洗澡要脫衣服,洗完澡離開浴室要穿衣服,在這個比喻中浴室洗澡就是情境(Context),脫穿衣服就是進入與離開這個情境下會需要進行的動作。
又或者程式設計師經常開完檔之後忘記關檔,所以我們會希望在 with
語句中進行讀檔的處理,並且讓程式執行離開 with
語句的範圍時,自動進行關檔,以免除一些繁瑣的動作,避免類似忘記關檔的事情發生。
Posted on Sep 6, 2016 in Python 程式設計 - 初階 by Amo Chen ‐ 2 min read
很多時候為撰寫速度與方便的結果,我們經常會把檔案開啟之後,就忘記關閉它。小小程式也許並不會讓人在意,但是當我們正在開發大型應用程式時,這樣的壞習慣經常會帶來無法預期的結果。
例如以下的 Python 片段就是一個不好的例子,因為它並沒有進行關檔的善後處理:
for line in open("file.txt"):
print line
Posted on Sep 5, 2016 in Python 程式設計 - 初階 by Amo Chen ‐ 2 min read
最近有朋友也開始寫起 Python,不過特別的是,他們是在不同的作業系統進行開發,有些人用 Windows,有些人用 Linux,這通常第一個地雷就是 “Tab 的間距在 Windows 與 Linux 是不一致的” ,這將可能導致 Python 執行時會產生 IndentationError: unindent does not match any outer indentation level
的錯誤訊息。也因此讓編者想寫下這篇文章,介紹 Python 的 Coding Style 與記錄編者常用的 Python 設定。
Posted on Sep 3, 2016 in Python 程式設計 - 初階 by Amo Chen ‐ 3 min read
Python 的 CSVDictWriter 是很方便的模組,可以直接使用 dict 資料寫入到 CSV 檔案,其用法大致如下:
import csv
with open('my.csv', 'w') as csvf:
writer = csv.DictWriter(csvf, fieldnames=[
'field_1',
'field_2',
'field_3'
])
writer.writeheader()
writer.writerow({'field_1': '', 'field_2': 'b', 'field_3': ''})
writer.writerow({'field_1': '', 'field_2': 'b', 'field_3': ''})
CSVDictWriter 雖然方便,但是如果 row 裡有缺少任何一個 field 都會停止執行,所以遇到欄位很多,而且又不見得每一個欄位都有值的情況就糟糕了,真的要手動打完所有欄位的值嗎?
其實只要搭配 defaultdict 就解決這個問題了。
Posted on Sep 2, 2016 in Python 程式設計 - 中階 by Amo Chen ‐ 1 min read
hasattr() – A Dangerous Misnomer 這篇文章指出,在 Python 2 的 hasattr()
有個問題會導致 hasattr()
的行為不正確,還蠻值得留意的。
Posted on Jul 16, 2016 in Python 程式設計 - 初階 by Amo Chen ‐ 1 min read
利用 Django 開發 Web application 時可以利用 logging 模組幫忙除錯,但如果是已經上線運作的 Web application 光靠 logging 模組就不夠方便了,畢竟無法時時刻刻都去看日誌檔(log)了解系統狀況,這時候就需要一些方便的服務來幫忙,譬如 Bugsnag 。
Posted on Jul 16, 2016 in Django by Amo Chen ‐ 2 min read