On 23/02/2023 09.05, Hen Hanna wrote:

           >  py   bug.py
        Traceback (most recent call last):
          File "C:\Usenet\bug.py", line 5, in <module>
                      print( a + 12 )
           TypeError: can only concatenate str (not "int") to str


Why doesn't  Python (error msg) do the obvious thing and tell me
             WHAT   the actual   (offending,  arg)  values are ?

In many cases, it'd help to know what string the var  A  had  ,   when the 
error occurred.
              ------------  i wouldn't have to put      print(a)     just 
above,  to see.

In some ways, providing this information seems appropriate. Curiously, this does not even occur during an assert exception - despite the value/relationship being the whole point of using the command!

    x = 1
    assert x == 2

AssertionError (and that's it)

Then again, remember that exceptions can be 'caught'. So, such data would need to be added to the exception-instance. This could become quite costly.



What are the appropriate tools for the job?


Don't add an extra print(), use a debugger.

Not only does this allow you to breakpoint critical points in the code, but identifiers can be watch-ed and changes noted. The other handy feature is being able to correct the current erroneous value of the identifier and continue execution.

For us, memory-challenged coders, there is no need to remember to remove the print() again, afterwards.


The TypeError indicates a problem between the programmer's ears. What was thought to be a string or an integer was the opposite. This seems to be playing fast-and-loose with Python's dynamic-typing. To quote: "we're all adults here". Thus, I wouldn't recommend 're-cycling' an identifier to represent two different (types of) data-point in the same code - but there's nothing to stop you/anyone!

The other possibility is that it was an accident. Sounds more like something I would do, but... In this case, the tool which is your/my friend is typing. The IDE should catch most of the situations where an int would be used as an str, or v-v. Remember though, Python's typing is (a) not part of the language, and (b) probably won't help at run-time.


PS are you aware that there is a Python-Tutor list for the use of people learning Python?
--
Regards,
=dn
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to