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

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

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

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

Q&A

解決済

3回答

262閲覧

pythonのrandom モジュール関連です

hosata

総合スコア12

Python

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

0グッド

0クリップ

投稿2017/11/04 14:02

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ

エラーメッセージ Traceback (most recent call last): File "C:\Users\ユーザーネーム\AppData\Local\Programs\Python\Python36\try_random.py", l ine 2, in <module> import random File "C:\Users\ユーザーネーム\AppData\Local\Programs\Python\Python36\random.py", line 146 raise TypeError from e ^ SyntaxError: invalid syntax ###該当のソースコード ```ここに言語を入力 python ここにご自身が実行したソースコードを書いてください

/try_random.py/
import random

def main():
print("test")
return 0

if name =="main":
main()
###試したこと
tyr_random.py
を実行するとこのエラーが出ました
importしてからmain()を実行した場合は問題なく実行できました
randomモジュールに問題があるのでしょうか?
どこに問題があるのでしょうか?
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

LouiS0616

2017/11/04 14:19

ご提示のtry_random.pyを動かそうとすると、import文より前に文法エラーが発生するはずです。以下の点を明確にしてください。1、try_random.pyの内容は本当にあっているか?(質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。見やすく表示され、余計な問答が減ります。)2、tyr_ramdom.pyと書いてありますが、これは誤植ですか?3、実行の詳細な手順と、ご利用の環境を書いてください。
hosata

2017/11/04 23:59

2の質問については、誤植です。
guest

回答3

0

ベストアンサー

Python標準ライブラリの、random.pkoko該当箇所が以下の通りで、エラーが出ているところをココと書き入れました。
中身は分からないですが、書いてあることからすると、Pythonのバージョンが2の場合の経路に入ってしまっています。

def setstate(self, state): """Restore internal state from object returned by getstate().""" version = state[0] if version == 3: version, internalstate, self.gauss_next = state super().setstate(internalstate) elif version == 2: version, internalstate, self.gauss_next = state # In version 2, the state was saved as signed ints, which causes # inconsistencies between 32/64-bit systems. The state is # really unsigned 32-bit ints, so we convert negative ints from # version 2 to positive longs for version 3. try: internalstate = tuple(x % (2**32) for x in internalstate) except ValueError as e: raise TypeError from e # ココ super().setstate(internalstate) else: raise ValueError("state with version %s passed to " "Random.setstate() of version %s" % (version, self.VERSION))

ところが、質問に書いてあるディレクトリ名からすると、try_random.pyを置いているディレクトリはPython3.6用の標準ライブラリらしいです。

つまりエラーは、Python3.6用の標準ライブラリのディレクトリ上Python2系を実行していることで発生していると推測します。

こちらはmacOSですが、

% cd /Users/hoge/.pyenv/versions/3.6.1/lib/python3.6/ % /usr/bin/python2.7 Python 2.7.10 (default, Feb 7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import random Traceback (most recent call last): File "<stdin>", line 1, in <module> File "random.py", line 146 raise TypeError from e ^ SyntaxError: invalid syntax

と再現できました。
実行する時のカレントディレクトリとスクリプトを置くディレクトリ、および実行しているPythonコマンドの実行ファイルのありかを再度確認してください。

特に、標準ライブラリが置いてあるディレクトリにユーザが自分でスクリプトを置くことは普通はやらないでしょう。
自分が書いたスクリプトは専用にディレクトリを作る方がよいと思います。

投稿2017/11/05 02:19

quickquip

総合スコア11038

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

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

hosata

2017/11/06 09:25

おいているディレクトリが悪かったみたいです。 専用のディレクトリを作ってファイルを移動させたらうまくいきました。 ありがとうございます。
guest

0

try_random.pyの先頭に

from __future__ import print_function print(__import__('sys').version)

を追加して実行してみてください。おそらくPython2系の情報が表示されると思います。

ご自身が意図するバージョンが2であればソースファイルの作成場所が良くないと思います。もし3が意図するバージョンであればスクリプトの実行の仕方がよろしくないんだと思います。

投稿2017/11/05 00:31

YouheiSakurai

総合スコア6142

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

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

hosata

2017/11/06 09:29

書いてあるとおりにしたら python 2.7.13と表示されました。 おかげで環境変数にpython2.7が設定してあることに気づきました ありがとうございます。
guest

0

試しに私の環境で確認したところ、146行目に同様の記述を見つけました。
ですので、以下の回答は誤りだと思います。撤回します。失礼しました。

以下、以前の回答

同じディレクトリに偽のrandom.pyがあるのだと思います。
以前試してみた残骸が残っていませんか?

投稿2017/11/04 14:08

編集2017/11/04 14:12
LouiS0616

総合スコア35660

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

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

LouiS0616

2017/11/04 14:14

...ん? try_random.pyの一行目のコメントおかしくないですかね。Cスタイルですね。
hosata

2017/11/04 23:03

1行目のコメントは実際には書いていません。 質問の便宜上ファイル名を書いときたかっただけです。 紛らわしい書き方をして、すみません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問