标签: traceback

ValueError:未知的url类型

标题基本概括了所有内容.这是我的代码:

from urllib2 import urlopen as getpage
print = getpage("www.radioreference.com/apps/audio/?ctid=5586")
Run Code Online (Sandbox Code Playgroud)

这是我得到的追溯错误:

Traceback (most recent call last):
  File "C:/Users/**/Dropbox/Dev/ComServ/citetest.py", line 2, in <module>
    contents = getpage("www.radioreference.com/apps/audio/?ctid=5586")
  File "C:\Python25\lib\urllib2.py", line 121, in urlopen
    return _opener.open(url, data)
  File "C:\Python25\lib\urllib2.py", line 366, in open
    protocol = req.get_type()
  File "C:\Python25\lib\urllib2.py", line 241, in get_type
    raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: www.radioreference.com/apps/audio/?ctid=5586
Run Code Online (Sandbox Code Playgroud)

我最好的猜测是urllib无法从不整洁的php URL中检索数据.如果是这种情况,是否有解决方法?如果没有,我做错了什么?

python parsing urllib urllib2 traceback

6
推荐指数
1
解决办法
2万
查看次数

为什么导入多处理时出现导入错误?

我有一个需要多处理的脚本.我从这个脚本中发现的是多处理模块存在问题.为了测试这个理论,我复制并粘贴了

from multiprocessing import Process

def f(name):
    print('hello', name)

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()
Run Code Online (Sandbox Code Playgroud)

进入测试脚本并收到以下回溯

Traceback (most recent call last):
  File "a.py", line 1, in <module>
    from multiprocessing import Process
  File "/usr/lib64/python3.3/multiprocessing/__init__.py", line 40, in <module>
    from multiprocessing.util import SUBDEBUG, SUBWARNING
  File "/usr/lib64/python3.3/multiprocessing/util.py", line 16, in <module>
    import threading        # we want threading to install it's
  File "/usr/lib64/python3.3/threading.py", line 11, in <module>
    from traceback import format_exc as _format_exc
  File "/usr/lib64/python3.3/traceback.py", line 3, in <module>
    import …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing traceback python-3.3

6
推荐指数
1
解决办法
3106
查看次数

手动创建Python Traceback

是否可以在Python中创建自定义回溯?我正在尝试编写一个raise_from()模仿Python 3的函数raise ... from ....

def raise_from(exc, cause):
    """ Raises the Exception *exc* from the calling stack-frame,
    settings its ``__cause__`` to *cause*. """

    exc.__cause__ = cause

    try: raise Exception
    except Exception:
        tb = sys.exc_info()[2]

    # Remove the last traceback entry.
    prelast_tb = tb
    while prelast_tb.tb_next:
        prelast_tb = prelast_tb.tb_next
    prelast_tb.tb_next = None

    raise type(exc), exc, tb
Run Code Online (Sandbox Code Playgroud)

不幸的是,traceback实例的属性是只读的.

python exception python-2.x traceback

6
推荐指数
1
解决办法
467
查看次数

当代码是字符串中的 exec() 时,如何以编程方式获取回溯的行号?

我有一个存储在字符串中的函数,它看起来像这样:

func_str = "def <func_name> ..."
Run Code Online (Sandbox Code Playgroud)

我正在使用“exec”评估它并在输入上使用它,如下所示:

exec func_str in locals()
locals()[func_name](inp)
Run Code Online (Sandbox Code Playgroud)

现在这个函数可能有一个异常,我想知道字符串中哪一行导致了它。在解释器中运行它会给出一条错误消息,这正是我想要的:

  File "<string>", line 6, in <func_name>
TypeError: can only concatenate tuple (not "int") to tuple
Run Code Online (Sandbox Code Playgroud)

这告诉我字符串中的第六行导致了问题。

有什么方法可以以编程方式捕获这个吗?我看过类似的解决方案,但它们没有解决来自在本地范围内执行的字符串的异常。当尝试使用回溯模块时,我只获得了调用 exec 的外部函数的行号。

谢谢

python traceback

6
推荐指数
2
解决办法
4321
查看次数

traceback仅显示多行命令的一行

我在服务器上添加了一个小的调试工具。它记录从获得的堆栈跟踪traceback.format_stack()

它包含一些不完整的行,如下所示:

File "/home/...../base/loop.py", line 361, in run
    self.outputs.fd_list, (), sleep)
Run Code Online (Sandbox Code Playgroud)

这不是很有帮助。

源代码行360和361:

rlist, wlist, unused = select.select(self.inputs.fd_list,
                                     self.outputs.fd_list, (), sleep)
Run Code Online (Sandbox Code Playgroud)

如果只有一行可以作为堆栈跟踪的一部分,那么我想说带有函数名称(此处为select.select)的行360 是正确的,因为堆栈是通过调用函数创建的。

无论如何,我希望打印整个(逻辑)行。或至少某些上下文(例如之前的2行)。那可能吗?我的意思是当然要付出足够的努力。

尝试添加行继续符\,但未成功。


EPILOGUE:基于Jean-FrançoisFabre的回答和他的代码,我将使用此功能:

def print_trace():
    for fname, lnum, func, line in traceback.extract_stack()[:-1]:
        print('File "{}", line {}, in {}'.format(fname, lnum, func))
        try:
            with open(fname) as f:
                rl = f.readlines()
        except OSError:
            if line is not None:
                print("    " + line + "  <===")
            continue
        first = max(0, lnum-3)
        # read 2 lines …
Run Code Online (Sandbox Code Playgroud)

python traceback

6
推荐指数
1
解决办法
420
查看次数

ValueError:尺寸必须相等,但输入形状为[?,784],[500,500]的“ MatMul_1”(尺寸:“ MatMul”)的尺寸为784和500

我是tensorflow的新手,并且正在关注senddex的教程。我不断收到错误-

ValueError: Dimensions must be equal, but are 784 and 500 for 
'MatMul_1' (op: 'MatMul') with input shapes: [?,784], [500,500].
Run Code Online (Sandbox Code Playgroud)

我认为引起问题的代码段是-

l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), 
hidden_1_layer['biases'])
l1 = tf.nn.relu(l1)

l2 = tf.add(tf.matmul(data, hidden_2_layer['weights']), 
hidden_2_layer['biases'])
l2 = tf.nn.relu(l2)

l3 = tf.add(tf.matmul(data, hidden_3_layer['weights']), 
hidden_3_layer['biases'])
l3 = tf.nn.relu(l3)

output = tf.add(tf.matmul(l3, output_layer['weights']), 
output_layer['biases'])

return output
Run Code Online (Sandbox Code Playgroud)

虽然我是菜鸟,可能是错的。我的整个代码是-

mnist = input_data.read_data_sets("/tmp/ data/", one_hot=True)

n_nodes_hl1 = 500
n_nodes_hl2 = 500
n_nodes_hl3 = 500

n_classes = 10
batch_size = 100

x = tf.placeholder('float', [None, 784])
y = …
Run Code Online (Sandbox Code Playgroud)

python machine-learning traceback python-3.x tensorflow

6
推荐指数
1
解决办法
8401
查看次数

Python:如何获取我所在函数的*full*名称

有没有办法让以下代码:

import traceback

def log(message):
    print "%s: %s" %(traceback.extract_stack()[0:-1][-1][2], message)

def f1():
    log("hello")

class cls(object):
    def f1(self):
        log("hi there")

f1()
mycls = cls()
mycls.f1()
Run Code Online (Sandbox Code Playgroud)

显示:

f1: hello
cls.f1: hi there
Run Code Online (Sandbox Code Playgroud)

代替:

f1: hello
f1: hi there
Run Code Online (Sandbox Code Playgroud)

我试图使用模块'inspect'但没有成功......

朱利安

编辑:

这里的要点是'log'函数能够自己检索其调用者名称(使用traceback,inspect或任何必要的平均值).

我不想将类名称或"消息"之外的任何内容传递给"日志"功能.

python inspect traceback

6
推荐指数
1
解决办法
638
查看次数

为什么 Python linecache 会影响回溯模块而不影响常规回溯?

考虑以下 Python 程序:

code = """
def test():
    1/0
"""

filename = "<test>"

c = compile(code, filename, 'exec')
exec(c)

import linecache

linecache.cache[filename] = (len(code), None, code.splitlines(keepends=True), filename)

import traceback

print("Traceback from the traceback module:")
print()
try:
    test()
except:
    traceback.print_exc()

print()
print("Regular traceback:")
print()

test()
Run Code Online (Sandbox Code Playgroud)

我正在动态定义一个引发异常的函数并将其添加到linecache. 代码的输出是

Traceback from the traceback module:

Traceback (most recent call last):
  File "test.py", line 20, in <module>
    test()
  File "<test>", line 3, in test
    1/0
ZeroDivisionError: division by zero

Regular traceback:

Traceback (most …
Run Code Online (Sandbox Code Playgroud)

python traceback

6
推荐指数
1
解决办法
188
查看次数

禁用位码时下载dSYM

为了使用服务Rollbar,必须禁用用于回溯符号化的位码。我还必须将dSYM文件上传到Rollbar。但是,禁用位码时,我在哪里可以得到dSYM文件?通常,我可以在iTunes connect中下载它们(但似乎只有在启用了位码的情况下才能在iTunes connect中下载它们,否则我错了吗?)。如果禁用,则看不到任何下载链接。

itunesconnect traceback ios dsym rollbar

5
推荐指数
1
解决办法
707
查看次数

为什么sys.exit()导致回溯?

根据如何在没有回溯的情况下退出Python?,调用sys.exit()Python脚本应该在没有回溯的情况下静默退出.

import sys
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)

但是,当我使用python -i "exit.py"(或从Notepad ++) Windows 7上的命令行启动脚本时,SystemExit会显示异常的回溯.

U:\>python -i "exit.py"
Traceback (most recent call last):
  File "exit.py", line 2, in <module>
    sys.exit(0)
SystemExit: 0
>>>
Run Code Online (Sandbox Code Playgroud)

为什么sys.exit()从Windows命令行运行时显示回溯?

(供参考,我在Windows 7上使用Python 3.6.4)

python cmd exit traceback

5
推荐指数
1
解决办法
1682
查看次数