Python に goto ステートメントが存在する場合

Najwa Riyaz 2023年1月30日
  1. Python で例外を使用して goto ステートメントをエミュレートする
  2. Python で break および continue ステートメントでループを使用して goto ステートメントをエミュレートする
Python に goto ステートメントが存在する場合

この記事では、Python に goto ステートメントが存在するかどうかについての回答を提供します。

基本的に、goto ステートメントは Python ではサポートされていません。一般に、これらのステートメントは非常に組織化されていないコードになるため、広く軽蔑されています。したがって、スパゲッティコードになってしまいます。このようなコードは、フローとデバッグを理解しようとすると、理解しにくくなり、さかのぼることができなくなります。

Python は、if-else 式、例外、ループなど、コードを分岐するいくつかの方法を使用して構造化プログラミングを可能にします。

Python で goto ステートメントをエミュレートする場合は、この記事にいくつかの例を示します。ただし、goto を使用するのはプログラミングの習慣としては不適切であるため、これらの方法はお勧めしません。

Python で例外を使用して goto ステートメントをエミュレートする

推奨されるプログラミング手法ではありませんが、例外を使用して goto を実装する構造化された方法を提供できます。結局のところ、例外は深くネストされた制御構造から飛び出す可能性があります。以下のこの例を確認してください。

class gotolabel(Exception):
    print("from the goto label")  # declare a label


try:
    x = 4
    if x > 0:
        raise gotolabel()  # goto the label named "gotolabel"
except gotolabel:  # where to goto the label named "gotolabel"
    pass

出力:

from the goto label

Python で break および continue ステートメントでループを使用して goto ステートメントをエミュレートする

break および continue ステートメントでループを使用して、Python で goto ステートメントをエミュレートできます。このサンプルプログラムは、この方法を示しています。

prompt = "Roll the dice "

while True:
    try:
        y = int(input(prompt))
    except ValueError:
        print("Please enter a valid number")
        continue

    if y > 6:
        prompt = "The dice has numbers 1-6 ! Input a number <6"
    elif y < 1:
        prompt = "The dice has numbers 1-6 ! Input a number >1"
    else:
        print("Correct!")
        break

出力:

Roll the dice hj
Please enter a valid number
Roll the dice 6
Correct!

ここで、continue ステートメントは、プロセスがループの次の反復にジャンプし、無限ループを引き起こすのに役立ちます。一方、break ステートメントはループを終了するのに役立ちます。

関連記事 - Python Loop