如何在Python中获得完整的异常



我正在用Python制作Minecraft Classic服务器。然而,我的代码中出现了以下错误:

Unhandled exception in thread started by <bound method Heartbeat.start of <__main__.Heartbeat object at 0x01FC3810>>

这是我的心跳代码:

import httplib
import time
import thread
def heartbeat(salt = 'wo6kVAHjxoJcInKx', name = 'ElijahCraft', public = 'True', users = '0', maximum = '2', port = '25565'):
    listen = httplib.HTTPConnection('www.minecraft.net')
    listen.request('GET', '/heartbeat.jsp?port=' + port + '&max=' + maximum + '&name=' + name + '&public=' + public + '&version=7&salt=' + salt + '&users=' + users)
    url = listen.getresponse()
    return url.read()
class Heartbeat(object):
    def start(self, salt, name, public, users, maximum, port):
        print 'Server URL:', heartbeat(salt, name, public, users, maximum, port)
        self.users = users
        while not done:
            heartbeat(salt, name, public, self.users, maximum, port)
            time.sleep(45)
    def __init__(self, salt = 'wo6kVAHjxoJcInKx', name = 'ElijahCraft', public = 'True', users = '0', maximum = '2', port = '25565'):
        self.done = False
        thread.start_new_thread(self.start, (salt, name, public, users, maximum, port))
if __name__ == '__main__':
    heart = Heartbeat()

如何获得完整的Traceback?

使用try/except 包装代码

import traceback
import sys
try:
    a = 1 /0

except Exception, inst:
    exc_traceback = sys.exc_info()[2]
    print str(inst) + "n" + str(traceback.format_tb(exc_traceback)).replace('\n', 'n')

您可以使用traceback模块,将start()方法重命名为_start(),并将其改为:

import traceback
[...]
def start(self, *largs):
    try:
        self._start(*largs)
    except Exception, err:
        exc_type, exc_value, exc_tb = sys.exc_info()
        traceback.print_exception(exc_type, exc_value, exc_tb)

最新更新