Am 07.11.23 um 20:10 schrieb MRAB via Python-list:
On 2023-11-07 18:30, dn via Python-list wrote:
On 08/11/2023 06.47, Egon Frerich via Python-list wrote:
I've no idea why this happens. In a module there are lists and definitions:
...

     ["%s%s%s " % (i[fCONV_AUSRICHTG], i[fLG2], i[fTYP]) for i in Felder])    File "/home/egon/Entw/Geldspur/geldspur/gui/GUI_Konfig.py", line 90, in <listcomp>      ["%s%s%s " % (i[fCONV_AUSRICHTG], i[fLG2], i[fTYP]) for i in Felder])
NameError: name 'fCONV_AUSRICHTG' is not defined

You see "Felder" and with "0 0 3 4" the correct value 4 for fCONV_AUSRICHTG. But there is the NameError.

What does <listcomp> mean? Is there a change from python2 to python3?

Works for me (Python 3.11 on Fedora-Linux 37)
- both as a script, and simple/single import.

What happens when you extract the second dimension's definitions into a
module of their own, and import that (with/out less-sophisticated join)?

The missing detail is this line from the traceback:

   File "/home/egon/Entw/Geldspur/geldspur/gui/GUI_Konfig.py", line 11,
in <module>
     class GUIcfg:

You are right. The list comprehension has to be outside the class. The scope rules have been changed python2 and python3.

Egon



Here's a small example that shows the problem:

----8<----
#!python3.11
# -*- encoding: utf-8 -*-

class Test:
    hello = "hello"
    print(hello)
    print([[zero] for _ in range(4)])
----8<----

and its traceback:

----8<----
hello
Traceback (most recent call last):
  File "C:\Projects\regex3\test_clipboard.py", line 4, in <module>
    class Test:
  File "C:\Projects\regex3\test_clipboard.py", line 7, in Test
    print([zero for _ in range(4)])
         ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Projects\regex3\test_clipboard.py", line 7, in <listcomp>
    print([zero for _ in range(4)])
           ^^^^
NameError: name 'zero' is not defined
----8<----

'zero' is visible in:

    print(hello)

but not in:

    print([zero for _ in range(4)])

Something to do with how scoping is implemented in comprehensions?


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to