見出し画像

エラーとリファレンスを流し読みするべからず

今話題の暗号通貨の取引所のAPIを取得して、

・価格予測

・自動売買

をしたいので、Qiitaのこちらの記事を参考にトライしました。

仮想通貨取引所のPoloniexからAPI経由でデータ取得し、ディープラーニング(Chainer)で翌日の価格予測をしよう

読み進めていくと、、、


————————————ここから引用——————————————

久々の休日にせっかくなら面白いことをしよう!と思いついたのが、今回の記事です。
ぜひ、読者の皆様にとって、データ解析のアプローチについて、理解の深まる記事となっておりましたら幸いです。

意外にも反響が!

前回、仮想通貨取引所のLiquiからデータをAPI経由で取得する初心者向けの記事を書きました。
前回の記事:仮想通貨取引所LiquiのAPIからPythonで情報を取得してみよう

————————————ここまで——————————————

と記載されておりました。


そこでまず、「前回の記事」を読み込みます。

「前回の記事」:仮想通貨取引所LiquiのAPIからPythonで情報を取得してみよう


読み込んでまず最初に出たエラーがこれ。

ミスと出ている箇所を抜粋します。

File "test_liqui2.py", line 6
res1 = request.get(url1) #レスポンスを取得
              ^
SyntaxError: invalid character in identifier
ディレクトリなので略>

友人から、

これはline6(6行目)のどこかにミスがあるということ

と教えてもらいました。

line6(6行目)↓

res1 = request.get(url1) #レスポンスを取得


また逐一一文字ずつ確かめるより、リファレンスを読み込み、理解しなければいつまで経っても進歩しないとアドバイスしてくれました。

そこで、error名称の

SyntaxError: invalid character in identifier

でググりました。

※リファレンスも日本語より英語のほうがよいそうです。英語といっても単語は難しいわけではなく、かつ完璧に理解する必要はなく、エラーの原因が分かればよいとのことです。


ググった結果、下記のページを見つけました。

SyntaxError: invalid character in identifier [closed]

回答を引用すると、

Use the correct character for you minus operator: -. You are using some other 'dash' character that the interpreter is considering just a name like y or x. But it is invalid!

どうも、関数がインストールできていないとかそういう問題ではなく、文字そのものにミスがあるようですね。

またこのような記述も確認できます。

>>> bad_minus = "—"
>>> good_minus = "-"

つまり

半角表記ではなく、全角表記になっている箇所があるのではないか

と考えました。


全角表記を探すと、、、。

ありました!

「#レスポンスを取得」の#です!


import json
import requests

#APIにリクエスト
url1 = 'https://api.liqui.io/api/3/info'
res1 = request.get(url1) #レスポンスを取得


#(全角)から#(半角)へ直し、保存し、再度

python ファイル名.pyと入力。そしてEnter!

よし!クリア!と思いきや、またエラー(笑)。

一難去ってまた一難です。


続いて表れたエラーがこれ。

name 'request' is not defined

ここから今日一番の学びです。

わざと僕と同じ画面(どこに間違いが隠れているのか、間違いを見つけるヒントも見つけにくいデフォルトの画面)僕が学んだ見るべきポイントをマークした画面の2つをスクショしました。


まず僕と同じ画面(どこに間違いが隠れているのか、間違いを見つけるヒントも見つけにくいデフォルトの画面)です。


次に僕が学んだ見るべきポイントをマークした画面です。


ああああああああああああ!!!!

とアハ体験できました?(笑)


見るべき箇所はこの3つです。

①phファイル(上画面)の

res1 = request.get(url1) #レスポンスを取得

の下線が引かれている「request」


②ターミナル(コマンドプロンプトと同義、下画面)の

File "test_liqui2.py", line 6, in <module>

の<module>


③②と同じく、ターミナル(コマンドプロンプトと同義、下画面)の

NameError: name 'request' is not defined

全文(強いて言えばrequest)

結論から言うと、実はこの3つの見るべき箇所を押さえれば、今回のミスは一瞬で片付きました。

でも、僕はもちろんそこには気づかず、意味不明だった

NameError: name 'request' is not defined

に目が行き過ぎ、ググってしまいました。

下記のリファレンスを見つけました。

NameError: name 'requests' is not defined [closed]

ここに掲載されている回答を引用します。


pip をインストールすることを要求し、続いてコードを修正したといいます。

具体的にどこを修正したかというと、、、。

修正前:import re

修正後:import requests

requestです。

それも正しい表記にするだけという、、、。

まあ、僕はこんな凡ミスしないやろ!とたかをくくっていたわけですが。

みなさんじっくり目を凝らしてください。

pythonでは上から順にコードが正しいかチェックされるので、僕がエラーを食らう箇所より上の行、

import json
import requests

#APIにリクエスト
url1 = 'https://api.liqui.io/api/3/info'

までは正しく、

res1 = request.get(url1) #レスポンスを取得

が間違っていました。

あ。

wwwwwwwwwwwwwww

気づきましたか?

実は、僕がimportしたrequestsは複数形ですが、APIの取得を参考にしていたページからコピペしたコードのrequestは単数形なのです。

あまりにイージーミスすぎて愕然としました。

※友人が

経験上、SyntaxError: invalid character in identifierとエラーが出た場合、5割程度全角表記の箇所がある

と教えてくれて、いくらか僕の気持ちは和らぎましたが、、、。

cf. invalid character in identifier のエラー


ところで、みなさん。僕がこのように書いていたことを覚えていますか?

(再掲)

結論から言うと、実はこの3つの見るべき箇所を押さえれば、今回のミスは一瞬で片付きました。

この3つの箇所(再掲)

①phファイル(上画面)の

res1 = request.get(url1) #レスポンスを取得

の下線が引かれている「request」

②ターミナル(コマンドプロンプトと同義、下画面)の

File "test_liqui2.py", line 6, in <module>

の<module>

③②と同じく、ターミナル(コマンドプロンプトと同義、下画面)の

NameError: name 'request' is not defined

全文(強いて言えばrequest)

requestに複数形のsをつけなければならないと分かっていた僕は、この記事を書いていて気づきました。

この3ヶ所に答えは既に書いてあったじゃん!

と。

すなわち①から、

res1 = request.get(url1) #レスポンスを取得

の下線が引かれている「request」にミスがある

②から、

具体的にはmodule(関数)としての役割を果たす「request」にミスがある

そして③から、

NameError: name 'request' is not defined

→エラーは表記に関するもの。 'request'とは定義されていない。

これらから、間違っている6行目より上の行でrequetらしきものを探すと、

2行目に

import requests

とあるわけなんですね。

よって、6行目のrequestに複数形のsをつければいいとなります。


備考

※先のリファレンスでは、まずpipをインストールするように!と記載していますが、僕はpipはインストールできていました。

先のリファレンス:NameError: name 'requests' is not defined [closed]

というのもAnacondaを介してpythonをインストールしていたからです。


友人からのレクチャー後、こちらの記事を執筆も終わりかけたので、

改めてを見ながら、取引所からAPI経由でマーケットデータを取得するのを試みたところ。

仮想通貨取引所LiquiのAPIからPythonで情報を取得してみよう

エディタ(上画面)


ターミナル(コマンドプロンプトと同義、下画面)

うまくいたっぽい、、、。です。

と、友人にメッセンジャーで報告文を打ったのですが、うれしくててんぱり、タイプミスしました(笑)。

でもそのほうがみなさんにもこの嬉しさが伝わり、僕みたいなガチアナログ人間がどんどんpythonで自分のスキルを高めてもらえればと思うので、修正しません(笑)。


続きをお楽しみに!


P.S. 友人には貴重な時間を割いて、僕のためにマンツーマンでレクチャーしてもらっています。
もし、この記事でなにか1つでも得るものがありましたら、僕だけではなく、みなさまからもお気持ちいただければ友人も喜んでくれると思います。

(僕も頑張って勉強日記を続けようと思えるので、、、笑。)


BTC ビットコイン
3KDN2smFNx5qxc2tTUmSQ9WaHBjasun6w3

ETH イーサリアム
0x4959767640B9C45cd92370aA200e77E8836fCa59


#python #プログラミング初心者 #プログラミング #日記






この記事が気に入ったらサポートをしてみませんか?