【问题标题】:Python: How to catch this Error (can't source error name) - binascii.ErrorPython:如何捕获此错误(无法获取错误名称) - binascii.Error
【发布时间】:2017-04-22 15:22:24
【问题描述】:

我正在为 b64decode() 函数使用 base64 模块,但是某些文本字符串会引发此错误:

'binascii.Error: Incorrect Padding'.

我知道这是因为字符串的长度不是 4 的倍数,这是 base64 编码文本的要求。

我不想只是在字符串的末尾添加 '=' 以使其成为 4 的倍数,而是要捕获错误并简单地声明该字符串不是 base64 编码的。它使用一般的'except:'工作,但是我想捕捉特定的错误,但我找不到相同的错误,因为它不像其他错误那样非常具体,并且'除了 binascii.Error: ' 显然是未定义的。帮忙?

【问题讨论】:

  • 它在binascii 模块中。
  • 是的,但这不是一个 .py 文件,它是一个已编译的 C 模块,所以我不能在里面修修补补
  • 你可以做import binascii然后用except binascii.Error as e:抓住它。

标签: python exception base64 binascii


【解决方案1】:

异常类型存储在binascii.Error,有多种捕获异常的方法:

# 1. you can import the binascii module
import binascii
try:
    pass
except binascii.Error as err:
    pass


# 2. or you can use the binascii from base64's namespace

try:
    pass
except base64.binascii.Error as err:
    pass


# 3. or you can use __import__ to do a temp import

try:
    pass
except __import__('binascii').Error as err:
    pass

【讨论】:

    【解决方案2】:

    原因

    except binascii.Error
    

    不起作用是因为 binascii 是从 base64 命名空间中导入的,所以它在我的工作命名空间中未定义。捕获错误的正确方法是

    except base64.binascii.Error
    

    幼稚的错误

    【讨论】:

    • 最重要的是成熟
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2019-01-28
    • 2020-10-26
    • 1970-01-01
    • 2021-12-14
    • 2012-05-31
    相关资源
    最近更新 更多