只有退潮時,你才知道誰在裸泳。
投資的密訣的是:別人「恐懼」時「貪婪」,別人「貪婪」時「恐懼」。
股神的經典句子
連線的異常,URLError: <urlopen error [Errno 111] Connection refused>
是深夜(淩晨)很多人不睡覺在抓資料,還是一直抓太多年,觀測站的web server會故意斷線。
這應該是離峰時間,何必設限呢?真相沒人知道,但程式要寫防呆。
想從78年抓到100年,
for k in range(78,101):
url = 'http://mops.twse.com.tw/mops/web/ajax_t51sb02?'\
'encodeURIComponent=1&step=1&firstin=1&off=1&TYPEK=sii&year='+str(k)
response = urllib.request.urlopen(url)
...........................................
c.execute('INSERT INTO fny VALUES (?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,? )', stk)
conn.commit()
每抓一年,秀那年,
78
79
80
81
82,
然後**,URLError: <urlopen error [Errno 111] Connection refused>**
那,那…,到底commit了沒有,希望它沒commit。
結果…
for row in c.execute('select yr,cpyname,r12,r13 from fny where between 78 and 82 '): #and r12>=20 and r13>=25 yr =83
print(row)
output:
(78.0, '新纖', 4.22, 4.04)
(78.0, '利華羊毛', 1.17, 0.92)
(78.0, '福懋興業', 15.47, 21.52)
(78.0, '大宇紡織', 5.54, 8.85)
(78.0, '年興紡織', 9.78, 26.22)
(78.0, '宏益', 5.65, 7.72)
(78.0, '國化', 9.17, 10.12)
(78.0, '和桐化學', 12.74, 23.09)
(78.0, '中鴻', 22.9, 59.1)
(78.0, '華通', 14.86, 20.58)
(78.0, '國揚實業', 12.09, 6.7)
(78.0, '龍邦國際', 4.04, 27.51)
(79.0, '台泥', 13.08, 17.53)
(79.0, '亞泥', 12.13, 15.2)
題外話,78年,只有12家上市公司。
commit了,所以ERROR,導致中斷,沒進回圈,但筆者的commit是寫在迴圈外,所以還是commit了。
老師上課有教,要防exception, error, 都沒有聽。
剛好過一半,才發生,上回做批次沒error中斷。
該怎麼寫呢??
對urlopen error, 還是任何error都要rollback呢?
題外話:筆者隨後又測了range(83,101):
想看看這個異常是否能重覆產生,結果沒發生了,
果然是不可預期的異常,想要它定時產生,還不容易。
試著加上 try ... except,在異常發生後,還原(rollback)
for k in range(83,101):
url = 'http://mops.twse.com.tw/mops/web/ajax_t51sb02?'\
'encodeURIComponent=1&step=1&firstin=1&off=1&TYPEK=sii&year='+str(k)
try:
response = urllib.request.urlopen(url)
..................................................
except URLError:
conn.rollback()
break #sys.exit("異常發生了")
conn.commit()
這段是參照http://docs.python.org/3/tutorial/errors.html官網的文件寫的。如果不是URL連線異常的error怎麼辦呢?
官網有寫到
except:
print("非預期的錯誤Unexpected error:", sys.exc_info()[0])
raise
讀寫檔案,也有常見的IOError: [Errno 2] No such file or directory: '/home/timloo/stock/month/2013_3149.csv'
筆者之前遇過,當除錯的訊息用(沒有補捉來做處理)
好久沒畫圖了!