首先,如果您认为这不是最佳实践,我很乐意在评论中讨论这一点。
我的问题如下,我尝试根据用户输入查找文件。如果找不到该文件,我会得到一个FileNotFoundError. 这很好,但我想给出一个适当的例外,可以更好地描述问题。用户并不真正知道存在的文件决定某些事情是否可能。所以 aFileNotFoundError可能看起来不合适。所以我目前拥有的是:
try:
x = get_file(...)
except FileNotFoundError as e: # Unsupported version
raise MyOwnException(f"Explaining the problem")
Run Code Online (Sandbox Code Playgroud)
上面的方法有效,但异常看起来像这样:
FileNotFoundError& 堆栈跟踪MyOwnException& 堆栈跟踪我愿意只拥有MyOwnException. 为了实现这一目标,我知道你可以这样做:
try:
x = get_file(...)
except FileNotFoundError as e: # Unsupported version
file_not_found = True
if file_not_found:
raise MyOwnException(f"Explaining the problem")
Run Code Online (Sandbox Code Playgroud)
我还可以使用 . 检查文件是否存在os.path.isfile(file_path)。但我希望有一个更优雅的解决方案,因为通常不鼓励在打开之前检查文件是否存在。
我需要从用户那里获取整数输入并将它们添加到一个集合中。整数的数量未知。当用户输入“完成”时,输入过程将结束。
这是我的代码:
s = set()
print('Please type the number, when you are done please type "Done":')
while True:
try:
a = int(input())
s.add(a)
except:
if a == "Done":
break
else:
print('Integer only, please re-type:')
continue
print(s)
Run Code Online (Sandbox Code Playgroud)
但它并没有按预期工作。
我的想法很简单。如果用户输入一个整数,那么没关系,只需添加到 set 即可s。如果他们输入一个字符串(这int(input()是错误的),那么它将进入except,如果该字符串是“完成”,则中断循环while True,如果不是,则要求用户重新输入并继续循环。
如果我先输入字符串并且正常输入,则会出现以下错误:
我尝试在开始时使用一个简单的 if-else 语句,但它会在 处导致回溯int(input())。
关于Delphi中异常处理的两个非常基本的问题.
1)什么时候Try?我的猜测是我不需要一个Try条款
但我确实需要 Try
我错过了什么吗?
2)尝试......最后还是尝试......除了......或两者兼而有之?多年来我一直认为这是一个或者两个选择,直到@RRUZ 用一些代码 回答了我的一个问题
try
CoInitialize(nil);
try
SetStaticIpAddress('Network card name','192.168.1.1','255.255.255.0');
finally
CoUninitialize;
end;
except
on E:EOleException do
Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Run Code Online (Sandbox Code Playgroud)
问题:是否只是去捕捉异常CoInitialize(nil);或来自SetStaticIpAddress('Network card name','192.168.1.1','255.255.255.0');?
换句话说,是否有可能通过尝试最终尝试除了?
[更新]#2的答案似乎是肯定的.此代码显示两个对话框...
procedure TForm3.FormCreate(Sender: TObject);
var x, zero : Integer;
begin
zero := 0;
try
try
x := 42 div zero;
finally
MessageDlg('Divide by zero finally', mtInformation, [mbOK], 0);
end;
Except …Run Code Online (Sandbox Code Playgroud) 嗨我最近开始在python中编码,我想知道如何处理错误.我做了教程diveintopython并在那里他使用加注错误来提供错误的反馈.在这里我的情况:我有一个函数,它检查一个字符串,代表一个数字,是7或8位长和其他一些东西
def checkNumber( someNumber ):
''' checks if Number is valid '''
someNumber = str(someNumber);
if not 6 < len(someNumber) < 9:
raise ValueError('number must be either 7 or 8')
if not re.search('^[0-9]{7,8}$', someNumber):
raise ValueError('only digits from 0...9')
sum = 0
if len(pzn) == 7: someNumber = '0' + someNumber
for n, a in list(enumerate(someNumber[:-1], start=1)):
sum += int(a)*n
if someNumber[-1]==str(sum%11):
return someNumber
else:
raise ValueError('not a vaild code')
Run Code Online (Sandbox Code Playgroud)
我独立使用此功能,但我也会从另一个函数调用它,它扫描条形码并调用此函数来验证代码.因此,如果扫描号码是正确的,它应该继续,如果不是,它应该继续扫描.像我这样做更好,并在扫描仪功能中放置一个try/except块,或者我应该返回一个False
非常感谢
当我尝试打开一个可能有也可能没有'http://'标题的网址时,我一直try-except在另一个网页中使用try-except.
但代码看起来很混乱.我想知道python是否有更好的方法来处理这些需求.实际上我已经阅读了'with'关键字..我觉得,这会让代码更难以阅读......
我有链接打开,但链接可能有一些缺失.例如,网址就像.xxx.com或http://xxx.COM.我必须测试http://和url,http:// plus www.加上网址,网址找到合适的网址.
如果没有,我必须记录原因,然后继续下一个链接:
for link in links:
url = link
if not url.startswith('http'):
try:
url1 = r'http://'+link
res = requests.get(url)
except Exception as e:
try:
url2 = r'http://www.'+link
res = requests.get(url)
except Exception as err:
self.print_error(*[url1, modify(e.message)])
self.print_error(*[url2, modify(err.message)])
self.error_log(*[url1, modify(e.message)])
self.error_log(*[url2, modify(err.message)])
else:
try:
res = request.get(url)
except Exception as e:
self.print_error(*[url, modify(e.message)])
self.error_log(*[url, modify(e.message)])
Run Code Online (Sandbox Code Playgroud) 在附加的代码片段中,目标是接收用户输入,并且根据它是否为整数,返回整数或递归调用函数,直到给出有效整数.
def verify_input(msg, str_exp=True, req_str=None):
user_input = input(msg)
if str_exp:
pass # TODO: implement later
else:
try:
return int(user_input)
except ValueError:
verify_input("Enter a whole number please. ", str_exp=False)
Run Code Online (Sandbox Code Playgroud)
如果用户在第一个函数调用上正确响应(即整数),则确实从函数返回整数.
问题是,如果用户行为不端并且首先没有响应整数,只在后续尝试中给出整数,我可以看到,使用调试器,该try子句总是转到except子句...即使第二次调用是整数.
综上所述:
verify_input(12)#=>返回12
verify_input("Hello")#=>返回调用verify_input ---> user给出答案"12"=>返回None.
提前致谢.
假设我有一个引发异常的方法:
def methodA(x, y):
if y != 0:
z = x / y
return z
else:
raise ZeroDivisionError("zero can not be a denominator")
Run Code Online (Sandbox Code Playgroud)
在方法B中,我调用了methodA而没有处理异常:
def methodB(x, y):
print methodA(x, y)
Run Code Online (Sandbox Code Playgroud)
在这里,我想要一些可以警告我ZeroDivisionError在methodB中存在潜在风险的东西,并且最好抓住它.有没有办法在方法A中添加某些代码,或者我们可以使用一些工具来找到我忽略了一些重要的异常吗?
我试图在Python 3.6中处理异常.我想处理每个可能的异常并打印异常.当我做
try:
raise RuntimeError("Test")
except:
e = sys.exc_info()[0]
print(e)
Run Code Online (Sandbox Code Playgroud)
它只是打印
class'_mysql_exceptions.OperationalError'
我如何得到异常的消息?在这种情况下,我希望输出为"测试".
try如果条件为真,我想加载文件.如果发生文件异常或条件为假,我想要执行第二行(一行)代码.
为了涉及鸟类,请考虑以下代码:
if try_to_fly:
try:
fly()
except FlyError:
walk("I'm walking instead of flying.")
else:
walk("I'm walking stead of flying.")
# more lines below #
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的.但是,它有walk("I'm walking stead of flying.")两次,这是很好的避免.
此外,还有更多的代码要做到这一点,因此我们不能return在没有考虑该代码的情况下使用try语句.
是否有更多的pythonic方式来做到这一点?
我有一个对象列表,其数量在分号后关联。试图将此列表转换为字典,但某些键一旦转换将丢失其值。尝试使用try / except,但不确定如何将值分别存储到字典中。
例:
t = ['Contact:10', 'Account:20','Campaign:', 'Country:', 'City:']
Run Code Online (Sandbox Code Playgroud)
转换时,Campaign和Country对象将没有值。我想通过或指定a NaN作为字典值。
我尝试了类似的方法,但无济于事。
for objects in t:
try:
dictionary = dict(objects.split(":") for objects in t)
except:
pass
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏。
try-except ×10
python ×9
exception ×2
python-3.6 ×2
delphi ×1
dictionary ×1
if-statement ×1
pylint ×1
python-3.x ×1
raise ×1
recursion ×1
return ×1
try-finally ×1
user-input ×1