Forum >> Programmazione Python >> Scripting >> Scope delle variabili nel try-except

Pagina: 1

Stavo facendo degli esperimenti in Python 2.7 e mi sono imbattuto nel seguente errore; lanciando questo script
import sys
import resource

MEMORY_LIMIT = 1024 * 1024 * 1 # 1 MiB

def memory_limit():
    resource.setrlimit(resource.RLIMIT_AS, (MEMORY_LIMIT, MEMORY_LIMIT))

memory_limit()

s = ""
while 1:
    try:
        s += "a"
    except MemoryError:
        print len(s)
        sys.exit(0)

ottengo un NameError alla riga print len(s). Il traceback completo è:
Traceback (most recent call last):
  File "limit.py", line 16, in <module>
    print len(s)
NameError: name 's' is not defined

La stranezza risiede nel fatto che s è definita ed inizializzata nello scope globale. Cosa mi sfugge? Notare che il seguente script termina correttamente
from random import randint
import sys

def foo():
    if randint(0, 100) == 23:
        raise Exception
    else:
        return "a"

s = ""
while 1:
    try:
        s += foo()
    except:
        print len(s)
        sys.exit(0)
Grazie in anticipo dell'aiuto :)



Ciao caro, sono al volo e non posso provare il codice, ma sei sicuro che raggiungendo il limite di memoria che hai settato, non si svuoti la memoria stessa e quindi s di fatto non esista più? Prova a leggere sulla documentazione, potrebbe essere questo il problema, che poi problema non sarebbe.

Scusa se non sono preciso, ma non uso mai questo sistema per limitare il range di utilizzo di uno script.

Cya


Pagina: 1



Esegui il login per scrivere una risposta.