我有一个有效的代码,并且有一个简单的问题。如果我要将文本文件从字符串更改为整数,我想要错误地处理它。有可能吗?只有当我将整数更改为字符串时才会收到错误警告,但是我希望它可以用于将字符串更改为整数。例如,如果我将“足球”更改为整数,我希望得到一个错误警告。然后,我想创建一个错误处理来打印,例如:“文本文件中有问题”。
textfile:
Football # 8-9 # Pitch
Basketball # 9-10 # Gym
Lunch # 11-12 # Home
Reading # 13-14 # Library
from pprint import pprint
class Activity:
def __init__(self, name, start_time, end_time, location):
self.name = str(name)
self.start = int(start_time)
self.end = int(end_time)
self.location = str(location)
def read_file(filename):
activities = []
with open(filename, 'r') as f:
for line in f:
activity, time, location = line.strip().split(' # ')
start, end = time.split('-')
activities.append(Activity(activity, start, end, location))
return activities
activities = read_file('sample.txt')
pprint(activities)发布于 2020-12-02 20:09:46
可以使用等数值检查字符串是否为整数。
因此,让我们将输入文件更改为:
Football # 8-9 # Pitch
Basketball # 9-10 # Gym
Lunch # 11-12 # Home
3 # 13-14 # Library现在我们要验证名称,为此我们将编写一个验证器:
class Activity:
def __init__(self, name, start_time, end_time, location):
self.name = self.validate_name(name)
self.start = int(start_time)
self.end = int(end_time)
self.location = location
def validate_name(self, name):
if name.isnumeric():
raise TypeError(f"The name: {name!r}, is not a string, please check your input file.")
return name
def __repr__(self):
return f"<{type(self).__name__}, (name={self.name}, start={self.start}, end={self.end}, loc={self.location})>",这会导致TypeError
line 13, in validate_name
raise TypeError(f"The name: {name!r}, is not a string, please check your input file.")
TypeError: The name: '3', is not a string, please check your input file.请注意,您的输入已经是一个字符串,因此不需要使用str(name)和str(location)。
编辑
以上解决方案仅验证整个名称是否为整数。对于检查输入是否使用有效字符的解决方案,我们可以在python中使用re模块和方法:
import re
def validate_input(self, name):
regex = re.compile('\d')
if regex.match(name):
raise TypeError(f"The name: {name!r}, contains an integer, please check your input file.")
return name只要输入名称中有一个整数,这就会中断。前面的解决方案将在输入(如:Football 3、3 Football )上继续使用。此解决方案将引发错误。
您可以在regex101上为自己尝试regex表达式。
https://stackoverflow.com/questions/65114473
复制相似问题