顯示具有 pdb++ 標籤的文章。 顯示所有文章
顯示具有 pdb++ 標籤的文章。 顯示所有文章

2013年5月11日 星期六

活動:Taipei.py 2013 4 月聚會



這次的聚會下著大雨,即便如此大家還是風雨無阻地來前來參與!


這次的流水帳系列心得文,來的比較慢一點   =口=
因為恰逢公司搬家 與工作上的撞牆期 ... Orz

對於 The Manx 這幾個月以來的協助再次表達感謝!

#本次聚會照片、投影片皆可至 Taipei.py 的 Meetup 社群 下載



Talk 1: Recoverable PDB

講者為在  The Manx 工作的果凍,是從高中就開始使用 Python 的大大
此議題超級有趣!竟然有人在翻 pdb 的 source code ,而且還講解給大家聽,這實在太棒了!
身為一個也是習慣使用 pdb 方式來除錯的人,此演講內容相當具有參考性

這次演講最可惜的地方是由於設備頻頻出問題,使得過程經常被中斷
可能會使聽眾較難集中注意力 ... Orz
補充:其實我平常 debug 用的 tool 是 pdb++
他除了相容於 pdb 以外,還支援語法上色、自動補全、以及一些額外的功能
相當推薦一試! (額外一提,我使用 bottle 是從不開 debug mode 的!) 


Talk 2: NLTK

講者為  Rueshyna ,帥氣的正妹講者一名

此議題我個人很感興趣,因為目前執行的專案接下來極有可能要去做 text mining
於是就當作吃大補丸般的認真聽講了(握拳)

此演講是有 錄影 的,有興趣者可以參考之。

演講時 demo 的 data source 是來自 stackoverflow 的標題
所以講者也得出了一些有趣的結論 XDDDDD
(有興趣的朋友請參考影片吧!我不能亂爆雷啊 !)



閃電秀


分別由 Kilik 與 Keith 帶來 RunSnakeRun 及 Ipython Notebook 的介紹
前者可以圖形化 profile 後的結果,讓人一目了然的了解程式慢在哪裡
後者則為一便捷的 web 介面,可用來分享程式碼,及讓人 Try 程式碼!


這次聚會最後的重點,就是與一群志同道合的朋友一同討論 PyLadies 的未來(這好像不是我們這群 Py豬哥該討論的事情??)

本次聚會除了認領到一個在趨勢當研替的強者我學弟以外,也初次遇到 PyConTW 註冊組的老大 jack ,趕緊向他拜碼頭一下!聚會時,每次遇到從新竹遠道而來的 CCC (這次還有另一位朋友),就覺得非常的熱血 。抱持著這個想法的同時,我所在的公司已於近日從台北搬遷到台南了,所以之後 Taipei.py 的聚會我可能會較少出現吧!但我也希望改天如果出現的時候,能讓人也會對 Python 的社群有熱血感 XD ... 無論如何,秉持著取之於社群回饋於社群的想法,之後我就在台南嘗試組織類似的聚會吧!(就叫做 Tainan.py 吧!)


2012年9月3日 星期一

心得:稍微加強一下 Python 的 logging module

Python 的 logging module 是一個非常好用、方便的工具
關於他的介紹除了官方文件外
這裡有一篇雖然是英文可是淺顯易懂的文章 Good logging pratice in Python 推薦參考

我發現我個人使用 logging 時,特別是使用 logger.error 來紀錄一些例外狀況時
  • 會想要隨手塞幾個 object 當作參數
  • 使用 logger.error 後,常伴隨著的是 return False 的語句
因此我嘗試寫個 wrapper 來把 logger.error 給包裝一下
但是這樣會有個小缺點,實際執行 logger.error 的 function 會變成是 wrapper function
這樣的行為,對於想要紀錄是哪一行程式碼呼叫 logger.error 時
會抓錯位置而導致跑到定義 wrapper function 的地方
或許還有辦法解決,不過我還是忍不住直接使用 PDB++ 來瞧瞧 logger.error 的 source code
意外發現相當容易修改

我的小修改如下:
  • 寫一個 error_hack 直接取代 error,當然是 based on 原本的程式碼作一點點小修改
  • 加上一個將所有 args 參數轉成字串的小功能
  • 在函數的最後加上一個回傳值 False

程式碼及範例如下:
(其實也沒什麼特別的,就是一個小修改,讓我以後方便使用及少寫一點程式碼)


# Modified by joe.dev 
import logging

FORMAT = '%(asctime)-15s %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger()
def error_hack(*args, **kwargs):
    if len(args) > 1:                   
        log_str = ""
        for a in args: 
            log_str += str(a) + "  "
    else:
        log_str = str(args)
    logger._log(40, log_str, None, **kwargs)# 40 -> error level
    return False
logger.error = error_hack

def do_some_task():
    return logger.error("Orz 1", "Orz 2", ["Orz 3"], {"Orz 4": "Orz 5"})

if do_some_task() is False:
    print "My task failed"

2011年12月26日 星期一

筆記:[Using pdb++ in Django] 解決 AttributeError: UnixConsole instance has no attribute 'old_sigwinch'

在django的環境下使用 pdb++ 時可能會遭遇到一些問題以致出現某些訊息:
AttributeError: UnixConsole instance has no attribute 'old_sigwinch'
看一下debug的訊息可以發現有問題的地方常常是因為設定了中斷點如:
import pdb; pdb.set_trace()
簡單的解決方法可以改為使用原本的pdp module:(不過就喪失了使用pdb++的意義了...)
import pdb; pdb.pdb.set_trace()
或是去找看看最後觸發exception的部分是不是因為 pyrepl 下的unix_console.py
如果是的話可以參考這裡的 Issue 解決方法,簡言之就是:



  1. 將最後trace到的 unix_console.py 作一些修改
  2. 重新再跑一次吧!




--
話說其實Django的Debug資訊真的相當豐富
不過為了更了解Django的運作,還是會需要使用原生的pdb或是 pdb++ 這種好物



Update: (2013.3.7)
pyrepl 版本 0.8.4 以後已解決此問題!