Erstens, ich weiß, ich sollte nicht globals() verwenden. Ich kenne Ich sollte nicht. Aber ich benutze eine benutzerdefinierte Django-API, die es mir nicht erlaubt, Sammlungen zu verwenden (soweit ich das beurteilen kann), also bin ich ziemlich fest mit der Verwendung von globals() beschäftigt.Deklarieren von Objekten für globals() mit einer verschachtelten for-Schleife
Ich versuche ein Spiel zu entwickeln, in dem ein Spieler 1 Wahl in der ersten Runde, 2 Wahlen in der zweiten Runde, 4 Wahlen in der dritten Runde hat (also ist die Formel zur Berechnung der Wahl pro Runde num_choices = 2)^num_rounds). Natürlich hat die erste Runde nur eine Wahl, also erkläre ich das statisch. Doch für die folgenden Runden Ich versuche, den folgenden Code zu verwenden:
for i in range(2, NUM_ROUNDS):
dec_num = math.pow(2, i)
for j in range(1, int(dec_num)):
globals()['dec_r{}_{}'.format(i).format(j)] = models.CharField(
choices=list_of_choices,
widget=widgets.RadioSelect(),
blank=False,
initial='blank'
)
aber wenn ich versuche, meine Django app zu laufen, erhalte ich folgende Fehler (und Traceback):
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/bin/otree", line 11, in <module>
sys.exit(otree_cli())
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/otree/management/cli.py", line 113, in otree_cli
execute_from_command_line(argv)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/otree/management/cli.py", line 133, in execute_from_command_line
utility.execute()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/management/__init__.py", line 328, in execute
django.setup()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/apps/config.py", line 198, in import_models
self.models_module = import_module(models_module_name)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 662, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/Users/_____/exp_econ_test/turn_taking_strategic_match_all_players/models.py", line 209, in <module>
class Player(BasePlayer):
File "/Users/_____/exp_econ_test/turn_taking_strategic_match_all_players/models.py", line 261, in Player
initial=Constants.choice1_name
IndexError: tuple index out of range
I Es hat etwas damit zu tun, wie ich den Variablennamen deklariere. Gibt es eine Alternative, die ich verwenden kann? Vielen Dank!
Welche Zeile verursacht diesen Fehler? –
Versuchen Sie außerdem, Modellfelder im globalen Bereich zu erstellen? Das wird wahrscheinlich nichts Nützliches bewirken. Was willst du eigentlich erreichen? –
Die Zeile, die den Fehler verursacht, ist anscheinend "initial = 'blank'", aber wenn ich sie entferne, wird stattdessen der Fehler von blank = False ausgelöst. Wenn ich es unter Verwendung dieser Methode unter Verwendung nur der runden Zahl deklariere, stoße ich nicht auf dieselben Probleme: http://stupidpythonideas.blogspot.com.au/2013/05/why-you-dont-want-to-dynamically- create.html – Krabo