On 2021-05-23 20:34, hw 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.  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.  It seems like a recipie
for creating chaos.

The example you're following calls the variables "myfloat", etc, not "float", etc, so, yes, you're hiding the names of the types. Don't do that.

As far as Python is concerned, it's just a name that refers to something. It doesn't care whether that something is a type or a function or something else, it's just a name that refers to something.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to