質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

12969閲覧

変数sys.argvが何をしているのか知りたい

kalon

総合スコア198

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/07/10 04:54

皆様いつもお世話になっております。

こちらのコードを読み解いているのですが、
python お天気apiから近日の天気を取得する

Python

1#encoding:utf-8 2import urllib2, sys 3import json 4 5try: citycode = sys.argv[1] #<----この変数はcitycodeに何を代入しているのでしょうか? 6except: citycode = '460010' 7resp = urllib2.urlopen('http://weather.livedoor.com/forecast/webservice/json/v1?city=%s'%citycode).read() 8 9 10resp = json.loads(resp) 11print '**************************' 12print resp['title'] 13print '**************************' 14print resp['description']['text'] 15 16for forecast in resp['forecasts']: 17 print '**************************' 18 print forecast['dateLabel']+'('+forecast['date']+')' 19 print forecast['telop'] 20print '**************************'

5行目のcitycodeに何を代入しているのでしょうか?

ご教授のほどよろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

try: citycode = sys.argv[1] except: citycode = '460010' #デフォルト地域

のワンセットで考えると理解できるかと思います。

コマンドライン引数の個数が(プログラム名を含め)1個だけだとsys.argv[1]でリスト範囲例外が発生しexcept:に飛びcitycode = '460010'が代入されます。
一方、python weather_api.py 123456のように引数をつけて実行するとコマンドライン引数の個数は(プログラム名を含め)2個あるのでcitycodeには123456が入ります。

投稿2017/07/10 05:01

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

sys.argv[1] はコマンド実行時に与えられた引数の 1 番目を citycode という変数に渡しています。

python

1try: citycode = sys.argv[1] #<----この変数はcitycodeに何を代入しているのでしょうか? 2except: citycode = '460010' 3resp = urllib2.urlopen('http://weather.livedoor.com/forecast/webservice/json/v1?city=%s'%citycode).read()

このコードをもう少し整形すると

python

1try: 2 citycode = sys.argv[1] #<----この変数はcitycodeに何を代入しているのでしょうか? 3except: 4 citycode = '460010' 5 6resp = urllib2.urlopen('http://weather.livedoor.com/forecast/webservice/json/v1?city=%s'%citycode).read()

こうなります。もしコマンド実行時に引数が与えられなかった場合 sys.argv はコマンド名のみが入った 1 個の配列(sys.argv[0])となり、sys.argv[1] を参照するとエラーになります。上記のコードはコマンド実行時に引数が与えられなかった場合に意図的に例外にする事でデフォルトの citycode (460010) を使わせるというコードになります。

コマンド引数の感覚が良く分からないのであれば

python

1import sys 2print(sys.argv)

このテキストを test_argv.py という名前のファイルに保存してコマンドラインから

$ python test_argv.py あいう かきく

と実行してみられると理解できるかと思います。

投稿2017/07/10 05:04

編集2017/07/10 05:06
mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問