1. ホーム
  2. Python

UnicodeDecodeError: 'ascii' コーデックは位置 0 のバイト 0xe5 をデコードできません: 序数が範囲 (128) にありません。

2022-02-19 21:15:31

ドルフィンスプライト : https://www.whhtjl.com そして UCLA GO : https://mgo.whhtjl.com

今日、pythonでmongoのインタラクションの練習をしながら、以下のコードを書きました。

#coding=utf-8

from pymongo import *

#Get the client, create the link
client=MongoClient('mongodb://py3:123@localhost:27017/py3')
#Switch database
db=client.py3
#Get the collection
stu=db.stu

#add
#s1=stu.insert_one({'name':'Zhang Sanfeng'})

#modify
#stu.update_one({'name':'Zhang Sanfeng'},{'$set':{'name':'abc'}})

#delete
#stu.delete_one({'name':'abc'})

#query
cursor=stu.find({'age':{'$gt':15}}).sort('_id',-1).skip(1).limit(1)
for s in cursor:
    print('Name: %s'%(s['name']))

s2=stu.find_one()
print('first: %s'%s2)

cur=stu.find()
print('first: %s'%cur.next())
print('second: %s'%cur.next())
print('Third: %s'%cur.next())

print('Total: %d'%stu.count())


プログラムを実行すると、次のようなエラーが発生します。

Webで検索した結果、asciiエンコードの問題であることがわかり、プログラムコードの前に以下の行を追加することで修正できました。

import sys
reload(sys)
sys.setdefaultencoding('utf8') 

#coding=utf-8

import sys
reload(sys)
sys.setdefaultencoding('utf8')
from pymongo import *

# Get the client and create the link
client=MongoClient('mongodb://py3:123@localhost:27017/py3')
#Switch database
db=client.py3
#Get the collection
stu=db.stu

#add
#s1=stu.insert_one({'name':'Zhang Sanfeng'})

#modify
#stu.update_one({'name':'Zhang Sanfeng'},{'$set':{'name':'abc'}})

#delete
#stu.delete_one({'name':'abc'})

#query
cursor=stu.find({'age':{'$gt':15}}).sort('_id',-1).skip(1).limit(1)
for s in cursor:
    print('Name: %s'%(s['name']))

s2=stu.find_one()
print('first: %s'%s2)

cur=stu.find()
print('first: %s'%cur.next())
print('second: %s'%cur.next())
print('Third: %s'%cur.next())

print('Total: %d'%stu.count())


#coding=utf-8

import sys
reload(sys)
sys.setdefaultencoding('utf8')
from pymongo import *

# Get the client and create the link
client=MongoClient('mongodb://py3:123@localhost:27017/py3')
#Switch database
db=client.py3
#Get the collection
stu=db.stu

#add
#s1=stu.insert_one({'name':'Zhang Sanfeng'})

#modify
#stu.update_one({'name':'Zhang Sanfeng'},{'$set':{'name':'abc'}})

#delete
#stu.delete_one({'name':'abc'})

#query
cursor=stu.find({'age':{'$gt':15}}).sort('_id',-1).skip(1).limit(1)
for s in cursor:
    print('Name: %s'%(s['name']))

s2=stu.find_one()
print('first: %s'%s2)

cur=stu.find()
print('first: %s'%cur.next())
print('second: %s'%cur.next())
print('Third: %s'%cur.next())

print('Total: %d'%stu.count())


もう一度プログラムを実行してください。

素晴らしい出来栄えです!!!