完美解决异常问题UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-7: ordinal not in ra

出现编码问题UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-7: ordinal not in ra,解决方法如下,下面先展示存在的报错问题。顺序复习以下异常处理的流程:

try:
    可能产生异常的代码块
except [ (Error1, Error2, ... ) [as e] ]:
    处理异常的代码块1
except [ (Error3, Error4, ... ) [as e] ]:
    处理异常的代码块2
except  [Exception]:
    处理其它异常

测试代码:

#!/usr/bin/python
try:
    1/0
except Exception as e:
    # 访问异常的错误编号和详细信息
    print(e.args)
    print(str(e))
    print(repr(e))
    print("计算逻辑存在异常")
    
    #args:返回异常的错误编号和描述字符串;
    #str(e):返回异常信息,但不包括异常信息的类型;
    #repr(e):返回较全的异常信息,包括异常信息的类型。

直接运行后报错:
在这里插入图片描述解决的方法一:在终端执行命令python运行以上测试代码的py文件:

export PYTHONIOENCODING=utf-8; python test_try.py

测试结果:
在这里插入图片描述解决方法二:在头文件加上utf-8编码方式

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    1/0
except Exception as e:
    # 访问异常的错误编号和详细信息
    print(e.args)
    print(str(e))
    print(repr(e))
    print("计算逻辑存在异常")

测试结果:
在这里插入图片描述
如果没有异常则进行如下else处理:
流程:

try:
    正常的操作
   ......................
except:
    发生异常,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

测试代码:

try:
    1/2
except Exception as e:
    # 访问异常的错误编号和详细信息
    print(e.args)
    print(str(e))
    print(repr(e))
    print("计算逻辑存在异常")
else:
    print("NONO->GOOD")

如果在docker容器内出现如上问题,解决方法如下:
之前出现此情况是因为配置Dockerfile时的ascii环境出现问题了

locale-gen en_US.UTF-8
vim /etc/default/locale
删除全部,添加如下
LC_ALL=“en_US.UTF-8”
source /etc/default/locale
或者
export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
在这里插入图片描述

以上解决了我的问题,以下你可以尝试一下.

或者
vim .profile
加入
export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
source .profile
转载自 https://blog.csdn.net/amcsc/article/details/84598581
如果出现每次退出容器再进入时修改被重置的情况,可以试试~/.bashrc或者vi /root/.bashrc 在末尾添加 source /etc/profile,保存退出

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 这个错误通常出现在Python编码字符串时,尝试使用ASCII编码去表示一个非ASCII字符的时候。这通常发生在使用中文、日文、韩文等非拉丁字符的时候。 解决这个问题的方法是使用支持非ASCII字符的编码方式,例如UTF-8。可以在代码开头添加如下语句来指定编码方式: ``` # -*- coding: utf-8 -*- ``` 如果你使用的是Python3,通常情况下它默认使用UTF-8编码方式,不需要额外指定。但如果你在处理文件时,文件的编码方式不是UTF-8,那么就需要手动指定正确的编码方式。 ### 回答2: 这个错误通常意味着Python的'ascii'编码无法处理某些非ASCII字符。ASCII是一种7位编码,它在计算机早期时期广泛使用,以代表所有常见的英语字符和标点符号。但是,随着全球化和多语言文化的壮大,ASCII编码已经不足以表示所有的字符了,不同语言都有自己的字符集。随着计算机的普及,Unicode应运而生。 在Python中默认使用的编码是'ascii',因此会遇到不能编码的问题。我们可以使用其他编码方式来解决这个问题。例如,我们可以使用'utf-8'编码方式。这种编码方式支持所有的Unicode字符,而且它也是更通用的编码方式。我们可以在Python脚本开头添加以下语句来指定编码方式: ``` # -*- coding: utf-8 -*- ``` 这个语句应该放在脚本的第一行。它告诉Python使用'utf-8'格式编码。这样我们就可以处理非ASCII字符了。 另一个方法是使用转义字符来表示这些字符。例如,我们可以将字符串中的非ASCII字符转义为Unicode编码,Python会自动将其转换为正确的字符。这样我们就可以在不更改编码方式的情况下使用这些字符。例如,我们可以将字符串"你好,世界"转换为: ``` "\u4f60\u597d\uff0c\u4e16\u754c" ``` 这些转义字符代表了Unicode编码中的字符。我们可以在Python脚本中直接使用这些转义字符,而不需要更改编码方式。 ### 回答3: “ascii” 编解码器无法编码字符。这个错误通常出现在尝试将含有无法被 ASCII 码所表示的字符的文本进行编码或解码的时候。ASCII 只包含128个字符,而这些字符用于表示常用的英文字母、数字和符号,如果文本中包含了非 ASCII 码可以表示的字符,那么就会出现“ascii” 编解码器无法编码字符的错误。 为了解决这个问题,我们可以采取以下几种方法: 1. 尝试使用其他编解码器:在 Python 中,我们可以使用其他的编解码器来代替默认的 ASCII 编解码器,比如 UTF-8、GBK 等编解码器,这样就能够处理更多的字符。可以使用以下代码进行设置: ```python import sys reload(sys) sys.setdefaultencoding('utf-8') ``` 2. 对文本进行过滤:从文本中过滤掉不能被 ASCII 码所表示的字符,只保留能够被 ASCII 码所表示的字符,这样就可以避免“ascii” 编解码器无法编码字符的错误。可以使用以下代码进行过滤: ```python import string def filter_ascii(text): printable = set(string.printable) return filter(lambda x: x in printable, text) ``` 3. 修改代码逻辑:如果文本中必须包含不能被 ASCII 码所表示的字符,那么就需要修改代码逻辑。我们需要使用其他的编解码器来处理这些字符,或者将文本进行转义或编码后再进行处理,以避免出现“ascii” 编解码器无法编码字符的错误。 总之,“ascii” 编解码器无法编码字符的错误是由于文本中包含了无法被 ASCII 码所表示的字符,在处理文本的时候需要进行处理,以避免出现该问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源代码杀手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值