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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

3120閲覧

プログラムの調査(スクリプトを実行して解析する)

Casablanca_mtg

総合スコア209

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/03/15 01:46

編集2017/03/15 10:58

お世話になります。
下記のようなスクリプトを作成して保存しました
#list_bench.py

-- coding: utf-8 --

...
if name ==’main':
...loop(bench1)
...loop(bench2)

そしてコマンドプロンプトで
python -m profile list_bench.py とコードをたたくと下記のエラーが出ます。
**********************************

C:\Users\mtg-1>python -m profile list_bench.py
Traceback (most recent call last):
File "C:\Users\mtg-1\Anaconda2\lib\runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "C:\Users\mtg-1\Anaconda2\lib\runpy.py", line 72, in _run_code
```ここに言語を入力

exec code in run_globals

```ここに言語を入力 File "C:\Users\mtg-1\Anaconda2\lib\profile.py", line 610, in <module>
main()
File "C:\Users\mtg-1\Anaconda2\lib\profile.py", line 597, in main
```ここに言語を入力

code = compile(fp.read(), progname, 'exec')

```ここに言語を入力 File "list_bench.py", line 2
...
^
SyntaxError: invalid syntax

構文エラーですがなぜこのようになるのかがわかりません
このファイルを置いている場所はC:¥Users¥mtg-1の下です
ちなみに使用OSはWin10です
よろしくお願いいたします
list_bench.pyをやり直しましたが

# -*- coding: utf-8 -*- import profile def bench1(list1, list2): list1 += list2 return list1 def bench2(list1, list2): list3 = list1 + list2 return list3 def loop(bench): for i in range(10000): bench([1,] *i, [2,] * i) profile.run('loop(bench1)') profile.run('loop(bench2)') if __name__ =='__main__': loop(bench1) loop(bench2) コード

returnのところでひかかります
まだこの続きがありまして
C:\Users\mtg-1>python -m profile list_bench.py
20012 function calls in 1.803 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 :0(hasattr)
2 0.000 0.000 0.000 0.000 :0(range)
1 0.003 0.003 0.003 0.003 :0(setprofile)
1 0.007 0.007 1.800 1.800 list_bench.py:2(<module>)
10000 0.130 0.000 0.130 0.000 list_bench.py:3(bench1)
10000 0.264 0.000 0.264 0.000 list_bench.py:6(bench2)
2 1.396 0.698 1.791 0.895 list_bench.py:9(loop)
1 0.000 0.000 0.000 0.000 profile.py:111(Profile)
1 0.000 0.000 0.000 0.000 profile.py:369(fake_code)
1 0.000 0.000 0.000 0.000 profile.py:379(fake_frame)
1 0.002 0.002 0.002 0.002 profile.py:9(<module>)
1 0.000 0.000 1.803 1.803 profile:0(<code object <module> at 0000000002B8A2B0, file "list_bench.py", line 2>)
0 0.000 0.000 profile:0(profiler)
このようにできました
さらに
C:\Users\mtg-1>python -m profile -s list_benchi.py
Traceback (most recent call last):
File "C:\Users\mtg-1\Anaconda2\lib\runpy.py", line 174, in _run_module_as_main
"main", fname, loader, pkg_name)
File "C:\Users\mtg-1\Anaconda2\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "C:\Users\mtg-1\Anaconda2\lib\profile.py", line 610, in <module>
main()
File "C:\Users\mtg-1\Anaconda2\lib\profile.py", line 605, in main
parser.print_usage()
File "C:\Users\mtg-1\Anaconda2\lib\optparse.py", line 1603, in print_usage
print >>file, self.get_usage()
File "C:\Users\mtg-1\Anaconda2\lib\optparse.py", line 1589, in get_usage
self.expand_prog_name(self.usage))
File "C:\Users\mtg-1\Anaconda2\lib\optparse.py", line 1566, in expand_prog_name
return s.replace("%prog", self.get_prog_name())
File "C:\Users\mtg-1\Anaconda2\lib\optparse.py", line 1561, in get_prog_name
return os.path.basename(sys.argv[0])
IndexError: list index out of range

IndexErrorが出ます。原因はどのようなことになりますか?
よろしくお願いいたします

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

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

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

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

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

coco_bauer

2017/03/15 02:02

コンパイルしようとしたソースプログラムが提示されていませんから、原因が判る訳がありません。 構文エラーがあるソースコードを使ったのが悪いとしか。
masaya_ohashi

2017/03/15 03:01

ソースコードは「```(バッククォート3つ)」で囲っていただくと整形されて見やすくなるので質問文の修正をお願いします。そのまま貼り付けているせいでインデントなども消えてしまっています。
Casablanca_mtg

2017/03/15 03:21

ありがとうございます。修正をいたしました。スクリプトファイルは記載通りです。なぜ...から始まるのかは私にも理解ができません
Zuishin

2017/03/15 03:33

まったく修正されていませんよ。パソコンで編集しているのであればプレビューがあるはずなので、それを見ながらしてください。Python でインデントが無いのは致命的です。行番号が出ているのにソースが省略されていたり、エラーも省略されていませんか?
Zuishin

2017/03/15 03:34

具体的には、ソース部分を選択して、<code> と書かれたところをクリックし、プレビューを見ながらインデントその他を直してください。
Zuishin

2017/03/15 04:08

これしきできないとなるとプログラミングは無理で説明も理解できないだろうしアドバイスしても無視するだろうと判断されますよ?
masaya_ohashi

2017/03/15 04:37

おちょくってるのかと思いましたが、多分ただの勘違いでしょう。頑張ってバッククォートで囲んでくれたようですが、それはソースコードではなくエラーメッセージです。あと、別に1行ずつ全部囲むのではなく、全体の先頭と末尾だけバッククォート入れれば十分です。
Casablanca_mtg

2017/03/15 04:46

書籍通りにコードを書いていますが多分...の前にbench1,bench2の情報を入れてあげないとだめなのだと思います。書籍の説明が完全に理解できていません。申し訳ございません
masaya_ohashi

2017/03/15 04:48

あの…その書籍の「...」は「省略」の意味であって、本来そこにあるコードはその説明よりも前に書かれているのではないでしょうか。「...」をそのまま打っても動くわけないですよ。
Casablanca_mtg

2017/03/15 04:49

少しいいえ大分頭を冷やして考えます。すべて書籍にと寄っていて自分で考えないでそのままコードを書いているだけなのが根源だと思います
Zuishin

2017/03/15 04:50

「...」の前にというか、「...」は省略の印で本来ならちゃんとしたコードが入るところなのでは?
masaya_ohashi

2017/03/15 04:51

多分そのページよりも前にdef loopとかdef bench1とかimportなんとかとか書いてあるページがないでしょうか。そのへんのコードをすっ飛ばしていきなり上記コードだけ書いても動かないと思いますよ。
Zuishin

2017/03/15 05:01

一応ソースそのまま実行してみました。main を囲むシングルクォートが一つ全角でした。とりあえず、テキストエディタかワードか何か知りませんが、それを使うのをやめて、構文チェックしてくれる IDE を使いましょう。
Casablanca_mtg

2017/03/15 05:07

サクラエディタで保存しています
Zuishin

2017/03/15 05:17

文法ミスをしない、してもすぐわかって自分ですぐ直せる自信があるならそのままで結構です。
Casablanca_mtg

2017/03/15 05:21

ただすみません。編集するときのcodeの使い方がわかりました.ありがとうございます
Zuishin

2017/03/15 05:22

llop は定義されていますが、loop はされていませんね。
Casablanca_mtg

2017/03/15 05:32

iiopはioopの間違いでした。修正して上書きしまして実行しましたがAssertionError: ('Bad return', ('profile', 0, 'loop(bench1)'))エラーが返ります
Zuishin

2017/03/15 05:33

ioop は定義されていても loop はされてないんでしょう。
Casablanca_mtg

2017/03/15 05:41

loop出直しました。記述間違いすみません。気を付けます
Casablanca_mtg

2017/03/15 05:42

loopで直しました。記述間違いすみません。気を付けます
Casablanca_mtg

2017/03/15 06:13

出来ました。ただしprofile.run('loop(bench1)') profile.run('loop(bench2)')は不要でした。いろいろ皆様ありがとうございました次に進めます。今回知らなかった2つのことを理解できただけでも本当に感謝しています
Zuishin

2017/03/15 07:11

おめでとうございます。回答にベストアンサーをつけてください。
masaya_ohashi

2017/03/16 00:30

解決済みになった質問に追記しても、ほとんど誰も見てくれませんよ。新しいわからないことは別の質問を立ち上げたほうがよいです。追記されるとごちゃごちゃしてどこがわからないのかが伝わりにくいです。
Casablanca_mtg

2017/03/16 00:54

わかりました。関連していたものでしたので大変失礼しました。別で質問させていただきます
guest

回答1

0

ベストアンサー

質問文のソースコード部分は「バッククォート3つ」で囲んでください。プレビューで見ておかしいと思わないのですか?過去の質問をいくつか見させてもらいましたが、どれも見づらいです。

バッククォートで囲まない場合

-- coding: utf-8 --

if name ==’main':
loop(bench1)
loop(bench2)

バッククォートで囲んだ場合

Python

1# -*- coding: utf-8 -*- 2 3if __name__ ==’__main__': 4 loop(bench1) 5 loop(bench2)

エラーメッセージの最後の部分を見てください。

File "list_bench.py", line 2
...
^
SyntaxError: invalid syntax

最後の行にあるSyntaxErrorとは構文エラーです。そんな書き方は間違っている、というPythonからの怒りです。1行目を見ればlist_bench.pyの2行目を見ろと書いてあります。実際にlist_bench.pyの2行目を見たら...という謎の点々があるでしょう。それを削除すればいいだけです。
ただ、正直この構文エラーが直ったところでまともに動くようには見えません…

投稿2017/03/15 04:29

masaya_ohashi

総合スコア9206

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問