wellwell3176
@wellwell3176

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Google Colab環境でプログラムの途中終了をしたい

解決したいこと

pythonを使って、
・「入力内容がエクセルのシート名と合致したときは処理をすすめる」
・「合致しないときはそこでプログラムを終了させる」
という処理をしたいのですが、exit()を使うとセッションがクラッシュします。

Google Colabのような環境ではexit()は使えないようなのですが、他に実現する方法がないか知りたいです。

使用しているプログラム

import openpyxl

workbook_raw=openpyxl.load_workbook("data.xlsx")
bookname_raw=workbook_raw.sheetnames

val = input("半角数字4桁を入力してください\n")

if val in bookname_raw:
  print("いいです")
else:
  print("だめです")
  #ここにexit()を入れるとセッションがクラッシュする

print("次の処理に進みます")

希望する仕様

半角数字4桁が一致する場合、
・「いいです」をprint
・「次の処理に進みます」をprint

半角数字4桁が一致しない場合
・「だめです」をprint
・プログラムをその時点で終了させる(次の処理に進みます、なども表示させない)

実際のプログラムでは「次の処理に進みます」以降でエクセルの内容を編集するため、
if文の中にprintを纏めるのは見にくいので、なるべく実行したくないと思っています。

こうやって書くと、if~elseの距離がすごく離れてしまって見づらい
import openpyxl

workbook_raw=openpyxl.load_workbook("data.xlsx")
bookname_raw=workbook_raw.sheetnames

val = input("半角数字4桁を入力してください\n")

if val in bookname_raw:
  print("いいです")
  print("次の処理に進みます")

 #~~エクセルの編集したりとかなんかいろんな処理~~


ここが遠くなる


else:
  print("だめです")
0

2Answer

いっそこうしてみては

if val not in bookname_raw:
  print("だめです")
else:
  print("いいです")
  print("次の処理に進みます")

 #~~エクセルの編集したりとかなんかいろんな処理~~

def func():
  #~~エクセルの編集したりとかなんかいろんな処理~~

if val in bookname_raw:
  print("いいです")
  print("次の処理に進みます")
  func()
else:
  print("だめです")

一般的にはこうするでしょうし

is_val_in_bookname_raw = False
if val in bookname_raw:
  print("いいです")
  is_val_in_bookname_raw = True
else:
  print("だめです")

if is_val_in_bookname_raw:
  print("次の処理に進みます")

こちらでも良いでしょう

2Like

Comments

  1. @wellwell3176

    Questioner

    回答ありがとうございます。
    やはりfunction分けが一般的なんですね
    今回は別の方から良い方法を教えていただけたのですが、今後の参考にさせていただきます。

関数挟むとreturnで処理を止められるのでシンプルかもしれません!

def _main():

    # bookname_raw の値は仮です。
    bookname_raw = ['1111', '2222']

    val = input("半角数字4桁を入力してください\n")

    if val in bookname_raw:
        print("いいです")
    else:
        print("だめです")
        return

    print("次の処理に進みます")


_main()
1Like

Comments

  1. @wellwell3176

    Questioner

    これなら組みたい仕様にバッチリです。
    元プログラムでreturnが動かない理由が分かっていなかったんですが、returnは関数を組んだ中でしか使えないんですね。勉強になりました。
    本質問クローズとさせていただきます。

Your answer might help someone💌