首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用int而不是字符串编写python文件时出错

用int而不是字符串编写python文件时出错
EN

Stack Overflow用户
提问于 2020-12-02 19:02:20
回答 1查看 158关注 0票数 2

我有一个有效的代码,并且有一个简单的问题。如果我要将文本文件从字符串更改为整数,我想要错误地处理它。有可能吗?只有当我将整数更改为字符串时才会收到错误警告,但是我希望它可以用于将字符串更改为整数。例如,如果我将“足球”更改为整数,我希望得到一个错误警告。然后,我想创建一个错误处理来打印,例如:“文本文件中有问题”。

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-02 20:09:46

可以使用等数值检查字符串是否为整数。

因此,让我们将输入文件更改为:

代码语言:javascript
运行
复制
Football # 8-9 # Pitch
Basketball # 9-10 # Gym
Lunch # 11-12 # Home
3 # 13-14 # Library

现在我们要验证名称,为此我们将编写一个验证器:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
 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模块和方法:

代码语言:javascript
运行
复制
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 33 Football )上继续使用。此解决方案将引发错误。

您可以在regex101上为自己尝试regex表达式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65114473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档