Python初学者常遇到的问题
1. SyntaxError: Non-UTF-8 code starting with ‘\xc4’ in file **[IDE开发工具为:Eclipse]
解决方案:设置文件的编码格式为UTF-8
第一种:将文件的编码格式修改为UTF-8
第二种:在对应的python文件中加上注解
-!- conding: UTF-8 -!-
或者
'''coding:UTF-8'''
注解:在建立项目时,将整个项目的设置的默认编码改成UTF-8,则后期建立的package及其中文件均为UTF-8的编码;如果在建立package时设置编码为UTF-8,则后期建立的文件均为UTF-8.
2. 关于Python中继承的问题:在一个module文件中写入父类,另一个module文件中写入子类,在子类中继承父类中的初始函数时报错。
父类代码:
class Car():
'''
一次模拟汽车的简单尝试
'''
def __init__(self,make,model,year):
'''
初始化描述汽车的属性
'''
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
'''
返回整洁的描述性信息
'''
long_name = str(self.year)+' '+self.make+' '+self.model
return long_name
def read_odometer(self):
'''
打印一条指出汽车里程的消息
'''
print("This car has "+str(self.odometer_reading)+" miles on it.")
def update_odometer(self,mileage):
'''
将里程表读数设置为指定的值
禁止将里程表读数往回调
'''
if mileage>=self.odometer_reading:
self.odometer_reading =mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self,miles):
'''
将里程表读数增加指定的量
'''
self.odometer_reading += miles
子类代码:
from character2 import Car
class ElectricCar(Car):
'''
电动汽车的独特之处
'''
def __init__(self,make,model,year):
'''
初始化父类的属性
'''
super.__init__(make,model,year)
my_tesla =ElectricCar('tesla','model s',2006)
print(my_tesla.get_descriptive_name())
************************************************* 错误原因*************************************************
此处想要导入类,如上代码所示只是导入了模块,Python的模块名与类名是在两个不同的名字空间中,初学者很容易将其弄混淆。
该问题可参考该链接:Python中模块名与类名的区别
########### 解决方法:将子类中引用部分修改一下############################
3.关于列表与字典这部分【个人常犯的错误】:
profile=[ ]相当于定义了一个列表,并不能按照字典的方式进行赋值,所以会报错
4. 关于Python中继承的问题:TypeError: descriptor ‘init’ requires a ‘super’ object but received a ‘str’
该部分具体的解决办法可参看该链接:TypeError: descriptor ‘init’ requires a ‘super’ object but received a ‘str’
源代码:
from character2 import Car
class ElectricCar(Car.Car):
'''
电动汽车的独特之处
'''
def __init__(self,make,model,year):
'''
初始化父类的属性
'''
super.__init__(make,model,year)
my_tesla =ElectricCar('tesla','model s',2006)
print(my_tesla.get_descriptive_name())
修改后代码为:将super改为super()
from character2 import Car
class ElectricCar(Car.Car):
'''
电动汽车的独特之处
'''
def __init__(self,make,model,year):
'''
初始化父类的属性
'''
super().__init__(make,model,year)
my_tesla =ElectricCar('tesla','model s',2006)
print(my_tesla.get_descriptive_name())
5. 在读取文件时,出现以下报错
报错原因是读取的文件中有中文。
核心思想:with open(filename) as f_obj
换成with open(filename,'r', encoding='utf-8') as f_obj:
参考代码:
'''
Created on 2022年8月18日
'.\files\Personal reminiscences of Henry Irving.txt'
@author: Administrator
'''
filename ='D:/Python/python_workspace/src/character2/files/Personal reminiscences of Henry Irving.txt'
try:
with open(filename,'r', encoding='utf-8') as f_obj:
# with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg ="Sorry,the file "+filename +" does not exist."
print(msg)
else:
# 计算文件大致包含多少个单词
words = contents.split()
num_words = len(words)
print("The file "+filename+" has about "+str(num_words)+" words.")
6.在使用unittest来进行测试是出现这样的报错
对应的代码:
import unittest
from character2.name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
'''测试name_function.py'''
def test_first_last_name(self):
'''能够正确地处理像Janis Joblin这样的姓名吗?'''
formatted_name = get_formatted_name('Janis', 'Joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
if __name__== '__main__': #这部分为报错后添加的部分
unittest.main()
7. python – 在Windows系统中安装matplotlib及导入Eclipse
前提: 使用pip将matplotlib已经下载好了,但是在eclipse中引用matplotlib时:会提示无效引用。
问题: 由于matplotlib是新安装的库,Eclipse中python的解析器中还没有包含这个库,理所当然无法正确导入matplotlib库,其实只需重新选择一次python 解析器及导入对应的库就可以了
具体解决方案: 重新配置一下解释器。
Step 1 | Step 2 |
---|---|
选择菜单栏中 Project- Properties,然后点击 Click here to configure an interpreter not listed | 重新选择一次python 解析器,相关的库会自动显示出来,进行勾选就可以了,然后点击 Apply 应用 |
8.在16章中遇到的问题:python报错问题–ModuleNotFoundError: No module named ‘pygal.i18n’
该问题可参考该链接来解决:添加链接描述