投稿/コメントを表示します。

メモと質問です。

まずはメモ。
raise ValueError('value の値は 100 以下にしてください。')

これでなんで
ValueError: value の値は 100 以下にしてください。

と表示できるのか知りたかったので、Ctrl+BでValueErrorを掘ってみました。
class ValueError(Exception):
    """ Inappropriate argument value (of correct type). """
    def __init__(self, *args, **kwargs): # real signature unknown
        pass

    @staticmethod # known case of __new__
    def __new__(*args, **kwargs): # real signature unknown
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass

しか定義されてなく、なぜこれで標準出力に表示されるのだ??? としばし考え込んでしまいました
が、readme.md
> 実行時エラーを発生させるのは、 raise 文。
と書いてあることに思い至り、
1. ValueErrorクラスに文字列を渡しインスタンス生成
2. そのインスタンスをraiseに渡す
3. raiseの中で渡されたValueErrorインスタンスが保持している文字列を標準出力に出力
という処理が行われているんだろう、と推測しました。

検証のため、以下のようなコードを書いてみました。
value = 200


class VE(ValueError):

    def __init__(self, *args: object) -> None:
        super().__init__(*args)
        print(*args)


if value > 100:
    v = VE('value の値は 100 以下にしてください。', 'hoge hoge')
    raise v

print("raise文の後の処理は実行されません。")

Ctrl+Bを使ってもraiseを掘り下げることはできなかったのでraiseの中で何が起きているかはわかりませんが、期待した結果になりました。


以下質問です。
①の検証コードを「実行」したときと「デバッグで実行」したときにコンソールに出力される結果が変わるのはなぜでしょうか。
実用上問題なさそうなのでスルーしてもよさそうなものですが、ちょっと気になりまして。

「実行」したときのコンソール出力
C:\Users\ikuma\PycharmProjects\python_basic_sec2-main\venv\Scripts\python.exe C:\Users\ikuma\PycharmProjects\python_basic_sec2-main\part10_exceptions\part10_02_raise_instance.py
value の値は 100 以下にしてください。 hoge hoge
Traceback (most recent call last):
  File "C:\Users\ikuma\PycharmProjects\python_basic_sec2-main\part10_exceptions\part10_02_raise_instance.py", line 13, in <module>
    raise v
__main__.VE: ('value の値は 100 以下にしてください。', 'hoge hoge')

Process finished with exit code 1

「デバッグで実行」したとき
C:\Users\ikuma\PycharmProjects\python_basic_sec2-main\venv\Scripts\python.exe "C:/Program Files/JetBrains/PyCharm Community Edition 2022.2.3/plugins/python-ce/helpers/pydev/pydevd.py" --multiprocess --qt-support=auto --client 127.0.0.1 --port 52291 --file C:\Users\ikuma\PycharmProjects\python_basic_sec2-main\part10_exceptions\part10_02_raise_instance.py
Connected to pydev debugger (build 222.4345.23)
value の値は 100 以下にしてください。 hoge hoge
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2022.2.3\plugins\python-ce\helpers\pydev\pydevd.py", line 1496, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2022.2.3\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:\Users\ikuma\PycharmProjects\python_basic_sec2-main\part10_exceptions\part10_02_raise_instance.py", line 13, in <module>
    raise v
__main__.VE: ('value の値は 100 以下にしてください。', 'hoge hoge')
python-BaseException

デバッガが内部で何やら処理してコンソールに見やすく表示してくれているということでしょうか?
2022/11/17 12:27