• 締切済み

pythonのexecについて

1 exec("a = 1 + 2") 2 exec("print(a)") 3 print(a) 3行目も3と出力されますがこの使い方は間違ってますか? Undefined variable 'a' と警告を出してます

  • Python
  • 回答数2
  • ありがとう数2

みんなの回答

  • evawo
  • ベストアンサー率0% (0/0)
回答No.2

Undefined variable 'a'は、変数の代入が無いのに、printによる出力処理があるために警告が出ているものです。 開発環境がわからないので憶測ですが、おそらくPylintのような、ソースコードをチェックする仕組みが動いているのだと思います。 execの中の"a = 1 + 2"などは、ただの文字列なので、ソースコードとしてチェックされず、代入がされていないように判断されてしまっています。 試しに、1行目の前に、execを使わず、単純にa=1 とでも代入を書いてみて下さい。警告は消えると思います。 なおexecは、セキュリティリスクも含めて、よく理解した上で使用することをお勧めします。(この質問自体、学習のためのコードかな?と推測) Pythonのプログラムとして意図通りに動作しますので、「間違っているか?」と問われると、間違ってはいないと答えます。 が、「良いコードか?」と問われたら、答えは変わります。そんなところでしょうか。

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.1

使い方としては間違っていないです。 ただ、python 3.7.5で試してみましたけど >Undefined variable 'a' と警告を出してます のように警告はでなかったです。

manamick
質問者

お礼

ありがとうございました。 警告が消えないので使うのを控えたほうがよさそうですね

関連するQ&A

  • Pythonについて

    Pythonで〇〇から〇〇の時に実行、 ということはできますか? if文を使うと if a <= 100: このように100以下のみ実行となりますが、 if a <= 100: if a >= 90: print("〇") else: print("×") else: print("×") aが90以上100以下の時、「◯」、それ以外の時「×」を出力するには上のような構文にすればいいですか? この構文より簡単な構文、もしくはより良い構文がある場合は教えてください。

  • PHPでexecやpassthruすると

    execやpassthruで実行した実行プログラムが終了するまで待たされると思いますが バックグラウンドで実行する方法はあるでしょうか? PHPはその行で止まらずに実行プログラムとは別に以降の行を実行するということです 要するにexecは実行プログラム実行のトリガーをかけるだけにしたいのです もしあったら具体的に数行以下のコードで教えてください よろしくお願いします

    • ベストアンサー
    • PHP
  • シェルファイル内での「setenv」、「unsetenv」の実行 その2

    シェルファイルの先頭行に、 「#!/bin/csh」 と記述したところ「system: Undefined variable.」というメッセージが出力されてしまいました・・・。 どうしたらよいのでしょう?設定の問題なのでしょうか? よくわからないのですが、 「env | grep csh」 と実行してみると「SHELL=/user/bin/csh」という結果がえられるのですが・・・。

  • javaのexecについて

    javaのexecについて質問があります。 ファイルAの内容を形態素解析を行いその結果を別のファイルBに保存するという事がしたいです。 形態素解析ツールはjumanを使用してます。 コマンドプロンプトで > juman < ファイルA > ファイルB とすると成功するのですが、execを使うとなりませんし、どのようにすれば解決すればよいのか検討もつきません。 どなたか解決するいい方法があれば教えていただけませんでしょうか? 

    • ベストアンサー
    • Java
  • Runtime クラスのexecメソッドについて

    javaで、Runtimeのexec()メソッドを使って、出てきた内容をJTextAreaに出力したいと思っています。つまり、JTextAreaをコマンドプロンプト風にしたいと思っています。しかし、exec()メソッドの戻り値である、Processクラスがいまいちよくわかりません。仕様書(日本語訳)を読んでもProcessクラスのgetInputStream()メソッドやgetOutputStream()メソッドの説明がいまいちピンときません。 try{ Process process = Runtime.getRuntime().exec("hogehoge"); /*---------------------------------------------------------*/ ここで、いかにしてJTextAreaに出力するのかわかりません /*---------------------------------------------------------*/ }catch(Exception e){ } どうか、わかる方よろしくお願いします。

    • ベストアンサー
    • Java
  • SSIの『#exec cmd』と『#exec cgi』の違いがよくわかりません

    SSI初心者の者です。 参考書(CGIプログラミング入門/翔泳社)を見ながらCGIとSSIの勉強をしてるのですが、SSIの『#exec cmd』と『#exec cgi』の違いがよくわかりません。 本には前者はPerlスクリプトで後者はCGIスクリプトの場合に使うって書いてあるのですが、この2つってどう違うのですか? 前後の文脈から察するにCGIスクリプトは『print "Content-Type: text/html"』があって、 Perlスクリプトはこれが無いものと読み取れるのですが そうなのでしょうか? 初心者向けに御回答していただけますよう、よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • Python: matrix追加でNoneの理由

    下記の#入力とPython #コード の実行で、「出力結果」が出ます #▼Aのところで、 matrix.append(d) を可視化しようとしたら None しか返りません 想像では入力の2行目以降が順次追加されていくイメージを想像していました [[11, 14, 16, 9]] [[11, 14, 16, 9], [11, 14, 16, 9]]  : 質問: 1)この#▼Aの下の行でNoneしか返らない理由をおしえてください 2)matrixに追加されて形成される行列は、単純にメモリ上で形成されていると考えていいですか? #入力 3 11 14 16 9 13 15 19 10 10 11 14 11 #コード N = int(input()) # 空のリストを作成 matrix = [] for i in range(N): # 入力を受け取り、リストに変換 d = list(map(int, input().split())) # リストをmatrixに追加 matrix.append(d) #▼Aここでmatrixを可視化しようとした print(matrix.append(d)) print(app) #▼Bここでもmatrixを可視化しようとした print(matrix) # 1行目の要素0 first_element = matrix[0][0] print(first_element) #11 #==出力結果================== None None None None None None [[11, 14, 16, 9], [11, 14, 16, 9], [13, 15, 19, 10], [13, 15, 19, 10], [10, 11, 14, 11], [10, 11, 14, 11]] 11

  • exec を使ってcmdを動かす

    現在、javaのexec関数を使ってcmdを実行したいのですが、うまく動作しなくて困っています。 ソースコードで説明すると、 try { Runtime r = Runtime.getRuntime(); Process p=       r.exec(newString[{"cmd.exe","/k","del","a.txt"}); } catch { } この様なソースでcmdを立ち上げて、a.txtというファイルを消去したいのですが、このプログラムを実際に動かすとa.txtはきえず、またcmdの画面も表示されません。 しかし、エラーは表示されずまたcmd.exeをnotpad.exeに変更するとちゃんとnotpadが立ち上がります。 どのあたりのソースがおかしいのでしょうか?ご指摘お待ちしております。

    • ベストアンサー
    • Java
  • python3

    def walk(): for i in range(hor): if i == hor_now: print("*", end="") for h in range(var - 1): print("〇",end ="") print() else: for h in range(var): print("〇",end ="") print() print(walk) 普通に出力することはできるんですが、defでユーザー定義関数にすると<function walk at 0x000001541505B9D0>こうなってしまいます、なぜでしょうか?

  • Pythonで記号が分からない

    # ---------------------------------------- # [条件の結合と否定 - 複雑な論理式4] # ---------------------------------------- # 条件x1, x2のいずれかが満たされ、かつx3が満たされるならば # "キリの良い正の整数"そうでなければ、"ふつうの整数"と出力してください a = 5 x1 = a % 2 == 0 # 2で割り切れる x2 = a % 5 == 0 # 5で割り切れる x3 = a > 0 if x1 x2 x3: print("キリの良い正の整数") else: print("ふつうの整数") 上記のソースコードですが、x1 = a % 2 == 0 # 2で割り切れるが分かりません。 代入してさらにイコール分があって、文法的におかしいです。 回答お願いします。

専門家に質問してみよう