2017-07-12 3 views
2

Ich habe cxfreeze verwendet, um eine ausführbare Windows-Datei von planrequest.py zu erstellen. Es schien in Ordnung zu sein, aber wenn ich die exe-Datei ausführen, bekomme ich NameError: name 'exit' is not definedNameError: name 'exit' ist nicht definiert

name exit is not defined in python besagt, dass das Update import sys zu verwenden ist. Allerdings verwende ich importieren sys. Der Code läuft gut, wie ein Python-Skript (wie in, ich die Befehlszeilenargumente ausgiebig getestet, bevor sie in einem ausführbaren kompilieren.)

import socket 
import sys 

if len(sys.argv) == 1: 
    print("Usage:") 
    print("PlanRequest [Request String] [Server IP (optional: assumes 127.0.0.1 if omitted)]") 
    exit() 

#[do stuff with the request] 
+1

'import sys tun sollten 'und dann' sys.exit() ' –

+0

Sie müssen' von sys import exit', 'cxfreeze' entfernt die' site' Initialisierung, die normalerweise einrichtet 'bu itins.exit' –

+0

Wenn Sie 'sys 'importieren, sollten Sie' sys.exit' verwenden, * aber * 'exit' sollte ebenfalls funktionieren. Überschreibst du es, dh hast du 'exit = ...' * irgendwo * in deinem Code? – DeepSpace

Antwort

6

Import sys wird nicht ausreichen, um exit im globalen Geltungsbereich zu leben.

Sie müssen entweder

from sys import exit 
exit() 

oder

import sys 
sys.exit() 

Hinweis tun, die, wie Sie auch argv verwenden, im ersten Fall, dass Siefrom sys import argv,exit

+0

Dies ist die Antwort, und das ist wirklich ein Schmerz. Wenn 'sys.exit' erforderlich ist, fühle ich mich wie die IDE sollte mir sagen, seine Pflicht. Vielleicht bin ich einfach nur an ... verfestigte ... Sprachen gewöhnt. – Tim

+0

Eine gute IDE sollte Ihnen auf die eine oder andere Weise sagen. In PyCharm, wenn ich 'Import sys' Typ dann' exit() ' druckt er mir eine Warnung unter der Importzeile "ununsed Import-Anweisung" – b1ch0u

1

Sie haben die Funktion sys anzuwenden:

sys.exit() 
Verwandte Themen