gpt4 book ai didi

python - 如何处理-AttributeError : 'NoneType' object has no attribute 'patient_id'

转载 作者:行者123 更新时间:2023-12-04 07:44:11 24 4
gpt4 key购买 nike

在这里寻找一些指导。我想知道如何处理这个问题标题中的异常。代码下方发布了完整的错误。

一些背景:在测试期间 - 当数据库中有匹配的患者时,我的 python 脚本中的下面这个代码块有效,但当数据库表中没有找到匹配的“patient_id”时抛出异常。我希望能够以某种方式处理这个异常。也许我只需要重写我的 IF-NOT 语句。我需要能够解释/处理来自用户的通配符条目,例如我的数据库有 patient_IDs“1 到 10”。当用户输入“1 到 10”时,代码工作正常。例如,如果用户输入 11,我会得到异常。需要以某种方式处理它。

欢迎提供建设性的反馈。

def delete_patient():
if not request.form['pid']:
flash("Field cannot be empty when deleting a Patient.", "orange")
#function takes mandated user input via request form
else:
trashXX = request.form['pid']
trash02 = silver.query.filter_by(patient_id=request.form['pid']).all()
for i in trash02:
divo.session.delete(i)
divo.session.commit()
trash03 = gold.query.filter_by(patient_id=trashXX).first()
divo.session.delete(trash03)
divo.session.commit()
flash("Patient Deleted Successfully", "green")
return redirect(url_for('show_patients'))
#function uses mandated user input as a a filter to locate patient (and records) in DB
#function locates a valid patient in DB, and proceeds to delete patient records first, and patient second.

完全异常(exception):

AttributeError: 'NoneType' object has no attribute 'patient_id'
Traceback (most recent call last)

File "C:\Python39\Lib\site-packages\flask\app.py", line 2464, in __call__

return self.wsgi_app(environ, start_response)

File "C:\Python39\Lib\site-packages\flask\app.py", line 2450, in wsgi_app

response = self.handle_exception(e)

File "C:\Python39\Lib\site-packages\flask\app.py", line 1867, in handle_exception

reraise(exc_type, exc_value, tb)

File "C:\Python39\Lib\site-packages\flask\_compat.py", line 39, in reraise

raise value

File "C:\Python39\Lib\site-packages\flask\app.py", line 2447, in wsgi_app

response = self.full_dispatch_request()

File "C:\Python39\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request

rv = self.handle_user_exception(e)

File "C:\Python39\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception

reraise(exc_type, exc_value, tb)

File "C:\Python39\Lib\site-packages\flask\_compat.py", line 39, in reraise

raise value

File "C:\Python39\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request

rv = self.dispatch_request()

File "C:\Python39\Lib\site-packages\flask\app.py", line 1936, in dispatch_request

return self.view_functions[rule.endpoint](**req.view_args)

File "<path>\tahnApp_01.py", line 226, in delete_patient

trashXX = trash02.patient_id

AttributeError: 'NoneType' object has no attribute 'patient_id'

最佳答案

您可以使用 hasattr() 或捕获 AttributeError 但 Python 社区推荐一种“请求宽恕比请求许可更容易”的策略,所以您应该看看对于 try - except block 中的属性,如下所示:

try:
if obj['patient_id']: # Look for attribute
pass
except AttributeError:
# Attribute not found, handle error
pass

如果您的 obj 可以是 None,从错误看来(AttributeError: 'NoneType' object has no attribute 'patient_id' ), 处理这种情况是很好的做法:

if obj:
try:
if obj['patient_id']: # Look for attribute
pass # Do something
except AttributeError:
# Attribute not found
pass # Handle error
else:
print('obj is None!')

您可以在此处找到有关异常处理的更多信息:Python docs

如果您的对象具有使用 hasattr() 的属性,您的另一个选择是提前明确查看:

if obj:
if hasattr(obj, 'property'):
pass # Do something
else:
pass # Handle the missing attribute
else:
pass: # Handle the missing object

如果您希望属性值不存在时具有默认值,您可以使用 getattr():

if obj:
a = getattr(obj, 'property', 'default value')
else:
pass # Handle the missing object

关于python - 如何处理-AttributeError : 'NoneType' object has no attribute 'patient_id' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67281105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com