arleigh418 / python-and-Taiwan-stock-market

Python 金融市場賺大錢聖經:寫出你的專屬指標
54 stars 17 forks source link

stock_list.py執行錯誤 #30

Open benny0130 opened 2 years ago

benny0130 commented 2 years ago

Hello 作者您好 , 不好意思,我目前打第一個程式就出錯了,請參考以下畫面,我的requests / bs4 / pandas應該都有裝成功,不知道怎麼會這樣,再請您協助解惑一下感謝您

對網站進行requests,並加入指定的headers一同請求

html_data = requests.get("https://isin.twse.com.tw/isin/C_public.jsp?strMode=2",headers=headers) Traceback (most recent call last): File "", line 1, in NameError: name 'requests' is not defined print(html_data) Traceback (most recent call last): File "", line 1, in NameError: name 'html_data' is not defined

arleigh418 commented 2 years ago

Hi 您好, 錯誤訊息向您表示了, 他並沒有找到html_data這一個變數,尚未被定義. 這意味著您的print(html_data)應該在宣告html_data變數之前,所以導致錯誤.

程式是一行行執行下去的, 您必須先賦予html_data值,如: html_data = requests.get("[https://isin.twse.com.tw/isin/C_public.jsp?strMode=2",headers=headers](https://isin.twse.com.tw/isin/C_public.jsp?strMode=2%22,headers=headers))

才可以將它print出來看. print(html_data)

否則將會跳出您所貼出的錯誤.

benny0130 commented 2 years ago

作者您好, 感謝回覆 , 不過我有先試過一行一行key , 還有copy and paste your code. 但他還是跑出了這個error.

以上感謝

擷取

arleigh418 commented 2 years ago

不好意思, 看到您的截圖才完全明白, 是我漏看了, 原因應是您的requests套件沒有裝好. 這得看您的requests套件是裝在虛擬環境內, 還是原生環境內.

我初步判斷您應該是裝在虛擬環境內,但是用vscode的快捷執行他沒有吃到虛擬環境,導致找不到虛擬環境. 建議可以嘗試三個解:

  1. 將stock_list.py或任何py程式搬出虛擬環境的資料夾, 不要將程式放在ENV資料夾裡面, 跟ENV資料夾擺在同一層後再執行
  2. 使用cmd來執行, cd到目標虛擬環境,啟動後執行程式.
  3. 想使用vscode執行,比較專業的做法,透過VSCODE設定去指定執行環境,步驟如下: a. 按Ctrl+Shift+P , 此時應出現一個輸入框 b. 輸入python select interpreter , 之後您可以看看選擇列中有沒有您的虛擬環境, 如果沒有, 可以選擇新增路徑,路徑是虛擬 環境資料夾中的Scripts資料夾裡的python.exe (e.g. D:/test/env/Scripts/python.exe) c. kill掉當前的終端機(最下方那個終端機區塊,附近應該有一個垃圾桶符號,點一下可以kill掉) 再次用快捷鍵執行, 應就可以.

請您嘗試看看囉, 有甚麼疑問歡迎在隨時提出討論!!

benny0130 commented 2 years ago

謝謝作者熱心回復,先前狀況已經排除,目前可以正常寫code.本書真的實戰性極高,謝謝作者撰寫本書,讓我們可以更有效的學習交易與python.謝謝您

arleigh418 commented 2 years ago

您客氣了,有其他疑惑歡迎隨時提出討論哦~

YZeCode commented 1 year ago

@arleigh418 你好,我想問stock_list.py 在CMD 執行完後,出現warning

UserWarning: Could not infer format, so each element will be parsed individually, falling back to dateutil. To ensure parsing is consistent and as-expected, please specify a format. x['上市日'] = pd.to_datetime(x['上市日'], errors='coerce')

執行結果是正常但是就會有這條訊息,再麻煩您解惑

謝謝

YZeCode commented 1 year ago

問題已解決 在 x['上市日'] = pd.to_datetime(x['上市日'], format="%Y/%m/%d", errors='coerce') 需定義日期格式 pandas預設是 日 月 年

arleigh418 commented 1 year ago

您好,謝謝您的分享。 在較新版本的pandas中,多了一些對日期格式的判斷與要求,就會出現您的警告。

在2021年底/2022年初那個時候的pandas(大概是版本1.3.5左右,現在是2.0.0)沒有這個問題。 感謝您的提出,也謝謝您提供的解決方式。