2016年6月15日 星期三

[windows] usb碟在 windows 與 mac 之間插來插去然後就不能用了。

為了交換資料,用 mac 把一個 usb碟做成 FAT32,剛開始還正常,幾次之後發現,中文字都亂碼了。再用個幾次連容量都不對。回到 windows 看裡面有兩個分割區,比較大的那個 windows 就看不見,想用 windows 來清掉分割區又點不到那個指令,卡住了怎辦?這時候 diskpart 是救星。

有很大的資料要交換,例如影片,用網路來傳還是比較慢,家裡的 wifi 就是沒辦法每秒 25 或 50 MB 來傳。所以一個 FAT32 的 usb碟一直是我的方式。但是這次就遇到檔名亂碼的問題,隨後發生分割區看不到的問題。從 windows 這邊來看,用 mac 來割 FAT32 會弄出兩個主分割區,讓 windows 搞不懂。要救回這個 usb碟的方法,應該是用 windows 自己來切分割區了。打開磁碟管理,對著分割區按下右鍵,清除分割區的選項居然是灰色不能選,這下無解了。至少這條路不能走。難道 windows 真的無招了嗎?
還好,這問題不是只有我發生,外國人也發生,解決方法就是 diskpart.exe 這個內建程式。
我只需要做到清除分割,建立分割區還是用原來的圖形格式化工具。
步驟:
(1) 進到命令列
(2) 輸入 diskpart 之後按 <enter>
(3) 輸入 list disk,看清楚第幾個是你的 usb碟,沒看清楚會非常悲劇,一定要算對。然後用 select disk n 選到你的 usb碟,n 是列表上第幾個磁碟。選完之後,再用 detail disk 確認一下。
(4) 接下來輸入 clean 指令,清除整個分割區。
(5) 離開程式,輸入 exit。
接下來的建立分割區,就照一般的格式化做法就行了。

參考:
http://superuser.com/questions/274687/how-do-i-format-a-usb-drive-on-a-pc-that-was-formatted-on-a-mac

[python] try except raise,為什麼會需要 raise ?

在 python 裡,對於有可能錯誤的地方,就是用 try 去包住它,然後針對可能的錯誤去處理它。像是:

try:
    f = open('x','r')
except IOError:
    raise
except Exception:
    print 'other error'
    raise

有天某個人問我,為什麼,既然已經是抓到問題了,為什麼還要 raise,把它丟出去呢?也許有很多理由,但我有兩個簡單的理由:(1)我想直接讓程式被停掉,(2)我想讓執行我寫的程式的程式也知道有問題,讓它自己決定該怎麼辦。這在寫程式給別的程式用的時候很重要。

在 raise exception 的時候,我以前是寫成以下這樣:
try:
    f = open('x','r')
except Exception, ex:
    print 'other error'
    raise ex

這樣在文句上好像很正常,但是就會出現困擾的地方,就是 traceback 所指的 exception 行號是在 raise 的地上,而不是真正發生的地方。

IOError                                   Traceback (most recent call last)
 in ()
      3 except Exception, ex:
      4     print 'other error'
----> 5     raise ex

IOError: [Errno 2] No such file or directory: 'x'
後來才發現,應該直接 raise 後面不加參數,才會如下指到對的行數去。

IOError                                   Traceback (most recent call last)
 in ()
      1 try:
----> 2     f = open('x','r')
      3 except IOError:
      4     raise
      5 except Exception:

IOError: [Errno 2] No such file or directory: 'x'