learning python ...
Igor Korot
ikorot01 at gmail.com
Mon May 24 01:34:16 EDT 2021
Hi,
On Mon, May 24, 2021 at 12:26 AM hw <hw at adminart.net> wrote:
>
> On 5/23/21 10:02 PM, Stestagg wrote:
> >
> >
> > On Sun, 23 May 2021 at 20:37, hw <hw at adminart.net
> > <mailto:hw at adminart.net>> wrote:
> >
> > On 5/23/21 7:28 PM, Peter Otten wrote:
> > > On 23/05/2021 06:37, hw wrote:
> > >>
> > >> Hi,
> > >>
> > >> I'm starting to learn python and have made a little example program
> > >> following a tutorial[1] I'm attaching.
> > >>
> > >> Running it, I'm getting:
> > >>
> > >>
> > >> Traceback (most recent call last):
> > >> File "[...]/hworld.py", line 18, in <module>
> > >> print(isinstance(int, float))
> > >> TypeError: isinstance() arg 2 must be a type or tuple of types
> > >>
> > >>
> > >> I would understand to get an error message in line 5 but not in 18.
> > >> Is this a bug or a feature?
> > >
> > > It is a bug in your code (which you don't provide). Did you
> > assign some
> > > value to float, e. g.:
> > >
> > > >>> float = 42.0
> > > >>> isinstance(int, float)
> > > Traceback (most recent call last):
> > > File "<pyshell#313>", line 1, in <module>
> > > isinstance(int, float)
> > > TypeError: isinstance() arg 2 must be a type or tuple of types
> > >
> > > If you do not shadow the built-in you should get
> > >
> > > >>> isinstance(int, float)
> > > False
> > >
> >
> > Apparently the attachment was stripped from my message. I'll put a
> > smaller version directly into this message instead of an attachment:
> >
> >
> > #!/usr/bin/python
> >
> > print("world!")
> >
> > int = 17
> > print("world", int)
> >
> > float = 6.670
> > print("world", float)
> >
> > foo = 0
> > print(type(int))
> > print(type(float))
> > print(type(foo))
> >
> > print(isinstance(foo, str))
> > print(isinstance(int, float))
> > print(isinstance(float, float))
> >
> >
> > I don't know about shadowing.
> >
> >
> > Shadowing is effectively saying “within this bit of code, (scope) I’m
> > going to use an already-used name for my own value”
>
> That should give at least a warning.
>
> > If I have defeated a whole variable type
> > by naming a variable like a variable type, I would think it is a bad
> > idea for python to allow this without warning.
> >
> >
> > There are some reasons why allowing this is quite nice. And there’s
> > actually a ton of corner cases to consider when thinking about changing
> > the rules
>
> Perl has a way to turn off unwanted warnings. It won't change the rules
> to give a warning.
>
> > Interestingly python 3 made this a little bit better by stopping you
> > from rebinding (shadowing) a number of built ins, such as True and False.
> >
> > In your case, I agree that it is super confusing.
>
> It seems dangerous and seems to show that python is too unfinished to be
> used. For all I know, it makes it easy to, for example, drop a whole
> table in a database because something was shadowed without warning.
>
> I can imagine that there can be all kinds of situations in which
> something like that happens, and you can spend hours or days trying to
> figure out what's wrong and may never find it.
>
> > One thing to learn to
> > look out for is if you assign to a name, then use that name on a
> > different context, expecting it to be different, then that’s not likely
> > to work as you expect.
>
> Then why doesn't give it at least a warning?
>
> There is even no indication from the output from the program before it
> aborts with an error message that something might be wrong: For
> 'type(float)', it prints "<class 'float'>" just like it does for int.
> How is anyone supposed to debug stuff like that?
>
> Why doesn't print(type(float)) give an error message after the variable
> type was already defeated (or prints something else)? What is it
> actually printing?
>
> > It seems like a recipie
> > for creating chaos.
> >
> >
> > Luckily almost every python code checker and/or linter will highlight
> > this for you.
> >
> > If you’re learning python, I’d highly recommend doing so in an ide or
> > editor that has a code checker running.
>
> Emcas highlights the syntax fine; I don't know if it can do more for
> python. It shouldn't need to.
>
> Things get creepy when a programming language makes it so that the
> programmer can't figure out anymore how a result produced by his program
> has come about.
Remember - python is an untyped language.
It is not C, C++ or even Pascal.
So there is no difference whether you write
float = 5.0
or
float1 = 5.0
Thank you.
> --
> https://mail.python.org/mailman/listinfo/python-list
More information about the Python-list
mailing list