gpt4 book ai didi

python 2 pdb : a statement behaves differently when run at the pdb prompt

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:22 27 4
gpt4 key购买 nike

这个问题可能真的很愚蠢,但就是这样。以下语句触发特定电子邮件的异常:

  File "/Users/me/tools/maildir-deduplicate/maildir_deduplicate/mail.py", line 104, in body_lines
_, _, body = self.message.as_string().partition("\n\n")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 621: ordinal not in range(128)

如果我在 PDB 下运行并在提示符下手动测试它,没有抛出异常并且 body 设置正确。

> /Users/me/tools/maildir-deduplicate/maildir_deduplicate/mail.py(105)body_lines()
-> _, _, body = self.message.as_string().partition("\n\n")
(Pdb) _, _, body = self.message.as_string().partition("\n\n")

但是如果我点击下一行,它仍然会抛出异常:

(Pdb) n
UnicodeDecodeError: UnicodeD...ge(128)')
> /Users/me/tools/maildir-deduplicate/maildir_deduplicate/mail.py(105)body_lines()
-> _, _, body = self.message.as_string().partition("\n\n")

如果我中断该语句,则会在 partition() 调用中抛出异常。

  File "/Users/me/tools/maildir-deduplicate/maildir_deduplicate/mail.py", line 106, in body_lines
body = self.message.as_string()
_, _, body = body.partition("\n\n")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 621: ordinal not in range(128)

pdb 下运行相同的故事:如果我点击 n 将抛出异常,但如果我输入 _, _, body = body.partition( "\n\n") 在提示符处。

知道是什么原因造成的吗?

最佳答案

我怀疑您的代码中有 from __future__ import unicode_literals:

测试代码:

#!python2
from __future__ import unicode_literals
body = b'abc\n\ndef\xd7ghi'
_,_,body = body.partition('\n\n')

直接运行时(无pdb):

Traceback (most recent call last):
File "C:\test.py", line 4, in <module>
_,_,body = body.partition('\n\n')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 8: ordinal not in range(128)

pdb 中单步执行时,出现 UnicodeDecode 错误:

> c:\test.py(2)<module>()
-> from __future__ import unicode_literals
(Pdb) n
> c:\test.py(3)<module>()
-> body = b'abc\n\ndef\xd7ghi'
(Pdb) n
> c:\test.py(4)<module>()
-> _,_,body = body.partition('\n\n')
(Pdb) n
UnicodeDecodeError: UnicodeD...ge(128)') <<<<<<<<<<<<<<<<
> c:\test.py(4)<module>()
-> _,_,body = body.partition('\n\n')

当手动执行该行时,因为 pdb 不在 __future__ 导入下,所以 '\n\n' 是一个字节串:

> c:\test.py(2)<module>()
-> from __future__ import unicode_literals
(Pdb) n
> c:\test.py(3)<module>()
-> body = b'abc\n\ndef\xd7ghi'
(Pdb) n
> c:\test.py(4)<module>()
-> _,_,body = body.partition('\n\n')
(Pdb) _,_,body = body.partition('\n\n') <<<<<<<<<<<<< manual
(Pdb) body <<<<<<<<<<<<< worked!
'def\xd7ghi'
(Pdb) n
UnicodeDecodeError: UnicodeD...ge(128)') <<<<<<<<<<<<< failed!
> c:\test.py(4)<module>()
-> _,_,body = body.partition('\n\n')

关于 python 2 pdb : a statement behaves differently when run at the pdb prompt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com