Rob, There are lots of nifty features each of us might like and insist make much more sense than what others say they want.
Sometimes the answer is to not satisfy most of those demands but provide TOOLS they can use to do things for themselves. As you agree, many of us have found all kinds of tools that help with debugging and frankly, some of them use it to the point of annoying others who would rather avoid them. An example is type hints that can get quite detailed and obscure the outline of your program and are ignored by the parser and only relevant for some linter or other such program. I am thinking of what would happen if I created several fairly long or complex data structures and tried to add them. Say I have a dictionary containing millions of entries including every conceivable UNICODE character as well as very complex values such as other dictionaries or strings containing entire books. My other data structure might be a forest containing many smaller trees, such as the output of some machine learning models or perhaps showing every possible game of chess up to 50 moves deep along with an evaluation of the relative strength of the board to one player. I then accidentally write code that contains: big_dic + forest_trees Would I like my error message consume all the paper in my city (or scroll my screen for a week) as it tells me a dict cannot be added to a forest and by the way, here is a repr of each of them showing the current (highly recursive) contents. Now people have written functions that take something long and truncate it so a list containing [1, 2, 3, ... 1_000_000] is shown in this condensed form with the rest missing, but then someone will complain they are not seeing all of it! So the deal is to use your TOOLS. You can run a debugger or add print statements or enclose it in a try/catch to keep it from stopping the program and other techniques. You can examine the objects carefully just before, or even after and do cautious things like ask for the length and then maybe ask for the first few and last few items, or whatever makes sense. In the original example, we were first asked about print(a + b) and later given a somewhat weirder func(x, y, x +y) as examples. Now ask what order things are evaluated and where the error happens. What is known by the party handling the error? If you put the offending statement in a try/catch scenario, then when the error is triggered, YOU wrote the code that catches the exception and you can often examine the payload of the exception, or know that the arguments of a or b or x or y were involved and you can craft your own output to be more clear. Or, you can even sometimes fix the problem and redo the code using something like float(x) or str(y). My impression here is that the error is not on the surface but caught deeper. The symbols used may be x and y but what if we work with "12" + 13 and follow what happens? Since the interpreter in python evaluates x+y before calling the function using the result as an argument, the function never sees anything. What should happen is that the interpreter sees a "12" which is normally an object of a class of str and then it sees a "+" and then it sees anything that follows as a second object it ignores for now. Python does not have a fully defined operator that it invokes when it sees a "+" as the meaning depends on what object is being asked to do whatever plus means to it. For a string argument, it means concatenate to your current content and return a new str object. The way that happens is that the class (or a relative) has defined a method called __add__() or it hasn't. If it has, it takes an argument of the second object and in this case it gets the integer object containing 13. So it runs the function and it has not been programmed on how to append an integer to a string of characters and it returns without an answer but an exception. The interpreter evaluator does not admit defeat yet and reasonable tries to see if the integer 13 has a __iadd__() which is similar but different and again, an integer has not been programmed to append itself to an object of type str. Could it have been? Sure. If you make your own (sub)class you can create a kind of integer that will make a str version of itself and append it o the "12" to make "1213" BUT in this case, that is not an option. So the integer method fails and returns an exception too. Now the parser functionality knows it has failed. "12" and 13 have both refused to implement the plus sign and either it catches the exception OR is does not and lets it flow upstream till any other functions in a chain catch it. Any one can then generate some error message, or it can reach the top level of the interpreter and it has to decide what to do. But some errors are not fatal. If str had no __add__() that is not an error. If it returns that it cannot do it, that is not a fatal error but a temporary drawback. Only when int fails too is there a likely error but int is not programmed to do anything lie reporting in __iadd__() and nor should it except if you are debugging new functionality. Can we get better error messages in many cases? Sure. Clearly the interpreter level sees a call like func(x, y, x+y) and if evaluating it causes an error, it could type out what all the variables were. But if you are running code at the console and it aborts like this, you usually have the variables at your fingertips and can say print(x) or print(y) but you cannot properly say print(x+y) yet. The error message did specify you were trying to work with incompatible objects as one was of type this and the other of type that. That suggests the values of both could have been accessed and shown in this case ad perhaps the code could be modified so it returns some semblance of the values at least for built-in objects. All that though adds code and complexity and often slows things down. -----Original Message----- From: Python-list <python-list-bounces+avi.e.gross=gmail....@python.org> On Behalf Of Rob Cliffe via Python-list Sent: Wednesday, February 22, 2023 4:31 PM To: python-list@python.org Subject: Re: Why doesn't Python (error msg) tell me WHAT the actual (arg) values are ? On 22/02/2023 20:05, Hen Hanna wrote: > Python makes programming (debugging) so easy I agree with that! Rob Cliffe -- https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list