ZhangZhihui's Blog  

 

1

 

In Python, every exception object has an attribute .args, which is a tuple containing the arguments you passed when raising the exception.

For example:

try:
    1 / 0
except Exception as e:
    print(type(e))
    print(e.args)
    print(e.args[0])

Output:

<class 'ZeroDivisionError'>
('division by zero',)
division by zero

Key points:

  • e.args is always a tuple.

  • Its contents depend on how the exception was constructed.

    • If you do raise ValueError("bad value", 123), then e.args == ("bad value", 123).

    • Many built-in exceptions only pass a single string, so e.args[0] is often the human-readable error message.

  • If no arguments were provided when raising the exception, e.args will be an empty tuple ().

So in your code,

print(e.args[0])

prints the first argument passed to the exception (commonly the error message).

👉 Do you want me to also show you a safe way to print the exception message (without risking IndexError if args is empty)?

 
You said:
Yes, I do. Thanks.
 
ChatGPT said:

Great 👍 Here’s a safe way to print the exception message without worrying about e.args being empty:

import sys

try:
    # some code
    1 / 0
except Exception as e:
    # Safe way: fall back to str(e) if args is empty
    msg = e.args[0] if e.args else str(e)
    print(msg)
    sys.exit(1)

Why this works:

  • e.args[0] gives you the first argument if it exists.

  • If not, str(e) will still return a meaningful string (e.g. '' for an empty exception).

In fact, in most Python codebases people simply use print(str(e)) (or print(e)) because str(e) internally builds a string from e.args.

👉 So the shortest safe version is:

except Exception as e:
    print(e)   # equivalent to print(str(e))
    sys.exit(1)

 

posted on 2025-10-10 10:11  ZhangZhihuiAAA  阅读(6)  评论(0)    收藏  举报