2016-08-10 2 views
0

Neu bei Python. Ich möchte meinen Code in main zum Zweck der Fehlersuche stoppen. Ich benutze das Logging-Modul, um den Variablenwert zu drucken, den ich untersuchen möchte.python sys.exit: eine Ganzzahl ist erforderlich (hat Typ str)?

Allerdings erhöht es Fehler. Nicht sicher, wie man es löst. Ich frage mich auch, mit sys.exit anstelle der Einrichtung Debugging-Punkt ist der richtige Weg, nur einen kleinen Teil des Codes zu laufen. Meine Hauptsache ist lang und ich möchte nicht jedes Mal die ganze Sache laufen lassen.

import linecache 
import logging 
import sys 

import pandas as pd 


def print_exception(): 
    exc_type, exc_obj, tb = sys.exc_info() 
    f = tb.tb_frame 
    lineno = tb.tb_lineno 
    filename = f.f_code.co_filename 
    linecache.checkcache(filename) 
    line = linecache.getline(filename, lineno, f.f_globals) 
    print('EXCEPTION IN ({}, LINE {} "{}"): {}'.format(filename, lineno, line.strip(), exc_obj)) 


if __name__ == "__main__": 
    try: 
     logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') 
     df = pd.DataFrame({'A': [0, -1, 3, 5, 4, 2, 1], 
          'B': [12, 12, 14, 15, 14, 16, 200]}) 

     sys.exit('error') 



    except: 
     print_exception() 

EXCEPTION IN (<ipython-input-9-f42a2adee11e>, LINE 49 "sys.exit('error')"): an integer is required (got type str) 

Updates: Ich habe den vollständigen Code aktualisiert. Ich bin auf Python3 mit Pycharm.

+4

Ich denke nicht, dass dies so trivial ist, wie andere es ausstellen. OPs Verwendung von sys.exit stimmt mit den Dokumenten überein. – Karin

+5

@wim Dieser Code funktioniert in Python 2.7.8 einwandfrei und ist konsistent mit der sys.exit() - Dokumentation. Ich vermute, dass es irgendwo ein Kontextproblem gibt, das nicht in diesem Code enthalten ist (da es offensichtlich nicht 49 Zeilen lang ist). – Lost

+1

@Karin Ich stimme zu, ich denke, die Leute nehmen den Fehler bei bareval, aber etwas anderes geht weiter, da diese Verwendung für mich auf Linux und Windows in einem schnellen Test funktionierte und die Dokumentation konsistent ist. Habe Python 3 noch nicht probiert – Lost

Antwort

3

Aus dem Kommentar Diskussion, ich vermuten, dass Ihr Problem ist, dass PyCharm die sys.exit zu handhaben versucht() intern und es funktioniert nicht wie die Tatsache, dass Sie eine benutzerdefinierte Fehlermeldung verwenden. Es gibt ähnliche Probleme in anderen IDEs wie die Python-Protokollierung, die in Spyder nicht ordnungsgemäß funktioniert (möglicherweise wurde sie bis jetzt nicht behoben).

Ihre Verwendung selbst scheint gültig zu sein und stimmt mit der Dokumentation für Python3 überein, und ich hatte keine Probleme, Ihren Code auf meinem System auszuführen, und es funktionierte wie erwartet.

Ich schlage vor, Sie versuchen, den Code mit Python direkt und ohne PyCharm ausführen und sehen, ob das das Problem löst. Wenn Python3 Ihre Standard-Python-Installation ist, sollten Sie nur eine BASH-Terminal oder Eingabeaufforderung in der Datei-Verzeichnis und geben Sie öffnen müssen:

python file-name.py 

Um das Programm im Terminal laufen. Ich vermute, das wird gut funktionieren, und was du hier wirklich gemacht hast, ist dein Programm nicht zu debuggen, sondern einen Bug (oder ein Feature) in pycharm gefunden.

-7

Sie benötigen eine ganze Zahl - einen traditionellen Unix-Return-Code (0 für keinen Fehler und etwas größer als 0 für etwas Schlechtes passiert).

In Bezug auf das Debuggen, sollten Sie die IDLE IDE versuchen, oder pdb

+4

Das ist nicht wahr. Zumindest in Python 2.7 ist dies ein gültiger Code. Es muss ein anderes Problem geben – Glostas

+1

Es ist auch falsch in Python 3. Siehe den Dokument-Link in meinem Kommentar zu der Frage. –

Verwandte Themen